ArrayAdaapter,SimpleAdapter,BaseAdapter的使用
1. ArrayAdapter
ArrayAdapter<String> adapter = new rrayAdapter<String>(this,android.R.layout.simple_expandable_list_item_1,data);
listView.setAdapter(adapter);
- 第一个参数:this这是上下文
第二个参数:这里采用的是系统自带的样式,当让我们也可以自定义
simple_list_item_1 : 单独一行的文本框
simple_list_item_2 : 两个文本框组成
simple_list_item_checked : 每项都是由一个已选中的列表项
simple_list_item_multiple_choice : 都带有一个复选框
simple_list_item_single_choice : 都带有一个单选钮第三个参数:数据资源,数据资源可以是集合,数组或者是数组资源(R文件)
2.SimpleAdapter
SimpleAdapter相对ArrayAdapter就比较高级啦,它可以放置文本和片,功能也比较强大
SimpleAdapter myAdapter = new SimpleAdapter(
getApplicationContext(),
listitem,
R.layout.list_item,
new String[]{"img", "text1", "tex1t"},
new int[]{R.id.imgtou, R.id.name, R.id.says}
);
ListView listView = (ListView) findViewById(R.id.list_test);
listView.setAdapter(myAdapter);
- 第一个参数:上下文
- 第二个参数:数据资源
- 第三个参数:布局资源
- 第四个参数:创建一个数组
- 第五个参数:布局资源中组件的id
3. BaseAdapter
该BaseAdapter是大多数适配器的基类,我们可以自定义,使用起来比较灵活,也是大多数程序猿的大爱
java代码:
class MyBaseAdapter extends BaseAdapter {
//获取当前items项的大小,也可以看成是数据源的大小
@Override
public int getCount() {
return list.size();
}
//根据item的下标获取到View对象
@Override
public Object getItem(int position) {
return list.get(position);
}
//获取到items的id
@Override
public long getItemId(int position) {
return position;
}
@Override
public View getView(int position, View convertview, ViewGroup viewGroup) {
/*ViewHolder通常出现在适配器里,为的是listview滚动的时候快速设置值,而不必每次都重新创建很多对象,从而提升性能。*/
ViewHolder holder = null;
if (convertview == null) {
convertview = View.inflate(TraficLightActivity.this, R.layout.traffic_item, null);
holder = new ViewHolder();
holder.road_id = (TextView) convertview.findViewById(R.id.road_id);
holder.redTime = (TextView) convertview.findViewById(R.id.red_time);
holder.greenTime = (TextView) convertview.findViewById(R.id.green_time);
holder.yellowTime = (TextView) convertview.findViewById(R.id.yelow_time);
convertview.setTag(holder);
} else {
holder = (ViewHolder) convertview.getTag();
}
mRoadLightInfo = list.get(position);
//setText要设置的内容:如果是取出来的数据是int类型的,那么,不会直接设置内容
//会去R类里去找对应的数据,如果没有,就会报资源找不到的异常
holder.road_id.setText(mRoadLightInfo.getRoadId() + "路口");
holder.redTime.setText(mRoadLightInfo.getRedTime());
holder.greenTime.setText(mRoadLightInfo.getGreenTime());
holder.yellowTime.setText(mRoadLightInfo.getYellowTime());
return convertview;
}
}
class ViewHolder {
TextView road_id;
TextView redTime;
TextView reenTime;
TextView yellowTime;
}
该类采用内部类MyBaseAdapter,该类继承了BaseAdapter,同时重写了四个方法。在是个方法中我们主要是重写getView方法。此外,我们为了不重新创建许多对象,我们采用了ViewHolder类,在该类中我们定义了几个属性。getView方法中我们首先获取view视图,并且获取里面的各个组件,给各个组件赋值。