安卓adapter适配器

来源:互联网 发布:linux运维之道 pdf 编辑:程序博客网 时间:2024/05/15 08:50

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视图,并且获取里面的各个组件,给各个组件赋值。

1 0
原创粉丝点击