当前位置: 主页 >业界资讯 >查看内容
android ListView之BaseAdapter的使用方法

IT蓝豹发表于 2016/1/4 9:24

通常在使用自定义适配器的时候,我们都会掌握一种固定的模式。充分利用convertView+缓存的方式。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
    private ArrayList<listbean> list ;
    private LayoutInflater mInflater;
    public DetailListAdapter(Context context,ArrayList<listbean> list){
        this.list=list;
        mInflater = LayoutInflater.from(context);
    }
    @Override
    public int getCount() {
        // TODO Auto-generated method stub
        return list == null ?0:list.size();
    }
 
    @Override
    public Object getItem(int position) {
        // TODO Auto-generated method stub
        return position;
    }
 
    @Override
    public long getItemId(int position) {
        return position;
    }
 
    @Override
    public View getView(int position, View convertView, ViewGroup parent) {
        ViewHolder holder = null;
        if(convertView == null){
            convertView = mInflater.inflate(R.layout.search_info_item_layout, null);
            holder = new ViewHolder();
            holder.TimeTxt = (TextView) convertView.findViewById(R.id.time_tv);
            holder.AddressTxt = (TextView) convertView.findViewById(R.id._address_tv);
            holder.processFlagTxt = (TextView) convertView.findViewById(R.id.process_flag_tv);
            convertView.setTag(holder);
        }else{
            holder = (ViewHolder) convertView.getTag();
        }
        holder.TimeTxt.setText(list.get(position).getTime());
        holder.AddressTxt.setText(list.get(position).getAddress());
        holder.processFlagTxt.setText(list.get(position).getState());
        return convertView;
    }
    class ViewHolder{
        TextView TimeTxt;
        TextView AddressTxt;
        TextView processFlagTxt;
    }
}</listbean></listbean>

 最近,做百度地图离线下载的时候,发现一种新的方式,很想知道百度的android程序员是如何来写代码的。仔细一看,确实有很大不同。

来自百度地图离线下载的Demo。

private ArrayList<mkolupdateelement> localMapList = null;
    public class LocalMapAdapter extends BaseAdapter {
 
        @Override
        public int getCount() {
            return localMapList.size();
        }
 
        @Override
        public Object getItem(int index) {
            return localMapList.get(index);
        }
 
        @Override
        public long getItemId(int index) {
            return index;
        }
 
        @Override
        public View getView(int index, View view, ViewGroup arg2) {
            MKOLUpdateElement e = (MKOLUpdateElement) getItem(index);
            view = View.inflate(OfflineDemo.this,
                    R.layout.offline_localmap_list, null);
            initViewItem(view, e);
            return view;
        }
 
        void initViewItem(View view, final MKOLUpdateElement e) {
            Button display = (Button) view.findViewById(R.id.display);
            Button remove = (Button) view.findViewById(R.id.remove);
            TextView title = (TextView) view.findViewById(R.id.title);
            TextView update = (TextView) view.findViewById(R.id.update);
            TextView ratio = (TextView) view.findViewById(R.id.ratio);
            ratio.setText(e.ratio + "%");
            title.setText(e.cityName);
            if (e.update) {
                update.setText("可更新");
            } else {
                update.setText("最新");
            }
            if (e.ratio != 100) {
                display.setEnabled(false);
            } else {
                display.setEnabled(true);
            }
            remove.setOnClickListener(new OnClickListener() {
                @Override
                public void onClick(View arg0) {
                    mOffline.remove(e.cityID);
                    updateView();
                }
            });
            display.setOnClickListener(new OnClickListener() {
                @Override
                public void onClick(View v) {
                    Intent intent = new Intent();
                    intent.putExtra("x", e.geoPt.longitude);
                    intent.putExtra("y", e.geoPt.latitude);
                    intent.setClass(OfflineDemo.this, BaseMapDemo.class);
                    startActivity(intent);
                }
            });
        }
 
    }
</mkolupdateelement>