Android ListView的使用与Adapter的用法

1、listView的使用步骤与ArrayAdapter的用法

(1)、定义一个数组来存放ListView中item的内容。

(例如:

private static final String[] strs = { "first", "second", "third", "fourth", "fifth" };

(2)、通过实现ArrayAdapter的构造函数来创建一个ArrayAdapter的对象。

(例如:

ArrayAdapter<String>  adapter=new ArrayAdapter<String>(this,android.R.layout.simple_list_item_1, strs);

,其中第二个参数可以自定义一个layout,但是这个layout必须要有TextView控件。);      

(3)、通过ListViewsetAdapter()方法绑定ArrayAdapter。

(例如:

listView.setAdapter(adapter)) 

另外:

(1)通过指定android.R.layout.simple_list_item_checked这个资源,实现带选择框的ListView。

扫描二维码关注公众号,回复: 314062 查看本文章

        需要用setChoiceMode()方法设定选择为多选还是单选,否则将不能实现选择效果。

(例如:

listView.setAdapter(new ArrayAdapter<String>(this,android.R.layout.simple_list_item_checked, strs));
listView.setChoiceMode(ListView.CHOICE_MODE_MULTIPLE);

(2)通过指定android.R.layout.simple_list_item_multiple_choice这个资源实现带CheckBox的ListView。

(例如:

listView.setAdapter(new ArrayAdapter<String>(this,android.R.layout.simple_list_item_multiple_choice,strs));
listView.setChoiceMode(ListView.CHOICE_MODE_MULTIPLE);

(3)通过指定android.R.layout.simple_list_item_single_choice这个资源实现带RadioButton的ListView。

(例如:

listView.setAdapter(newArrayAdapter<String>(this,android.R.layout.simple_list_item_single_choice,strs));
listView.setChoiceMode(ListView.CHOICE_MODE_SINGLE);

ListView绑定一个点击监听器:

listView.setOnItemClickListener(new OnItemClickListener() {
   public void onItemClick(AdapterView<?> arg0, View arg1, int arg2 ,long arg3) {
       }
});

2、ListView使用SimpleAdapter

(1)根据需要定义ListView每行所实现的布局。

(2)定义一个HashMap构成的列表,将数据以键值对的方式存放在里面。

(3)构造SimpleAdapter对象。

(4)将LsitView绑定到SimpleAdapter上。

3、 ListView使用BaseAdapter与ListView的优化

 

 使用BaseAdapter必须写一个类继承它,同时BaseAdapter是一个抽象类,继承它必须实现它的方法。其中最重要的是getView()方法。

getCount();

getItem(int position);

getItemId(int position) ;

getView(int position, View convertView, ViewGroup parent);

当系统开始绘制ListView的时候,首先调用getCount()方法。得到它的返回值,即ListView的长度。然后系统调用getView()方法,根据这个长度逐一绘制ListView的每一行。getItem()和getItemId()是在需要处理和取得Adapter中的数据时调用。

当convertView为空时,用setTag()方法为每个View绑定一个存放控件的ViewHolder对象。

当convertView不为空,重复利用已经创建的view的时候,使用getTag()方法获取绑定的ViewHolder对象,这样就避免了findViewById对控件的层层查询,而是快速定位到控件。

public class WeatherActivityAdapter extends BaseAdapter {

    private Context context;
    private ArrayList<WeatherBean> list;

    public WeatherActivityAdapter(Context context, ArrayList<WeatherBean> list) {
        this.context = context;
        this.list = list;
    }
    @Override
    public int getCount() {
        return list.size();
    }
    @Override
    public Object getItem(int position) {
        return list.get(position);
    }
    @Override
    public long getItemId(int position) {
        return position;
    }
    @Override
    public View getView(int position, View convertView, ViewGroup parent) {
        ViewHolder vh = null;
        if (convertView == null) {
            vh = new ViewHolder();
            convertView = LayoutInflater.from(context).inflate(R.layout.weather_item_layout, parent, false);
            vh.tv_date = (TextView) convertView.findViewById(R.id.date_textView);
            convertView.setTag(vh);
        } else {
            vh = (ViewHolder) convertView.getTag();
        }
        WeatherBean bean=list.get(position);
        vh.tv_date.setText(bean.date);
        return convertView;
    }
}
class ViewHolder {
    TextView tv_date;
}	

猜你喜欢

转载自jishudaren.iteye.com/blog/2288952