adapter怎么写( 二 )


4.listview中baseadapter怎么写ListView初步了解 在ListView的使用中 , 有时候还需要在里面加入按钮等控件 , 实现单独的操作 。
也就是说 , 这个ListView不再只是展示数据 , 也不仅仅是这一行要来处理用户的操作 , 而是里面的控件要获得用户的焦点 。读者可以试试用SimpleAdapter添加一个按钮到ListView的条目中 , 会发现可以添加 , 但是却无法获得焦点 , 点击操作被ListView的Item所覆盖 。
这时候最方便的方法就是使用灵活的适配器BaseAdapter了 。使用BaseAdapter必须写一个类继承它 , 同时BaseAdapter是一个抽象类 , 继承它必须实现它的方法 。
BaseAdapter的灵活性就在于它要重写很多方法 , 看一下有哪些方法 。步骤一 List的使用数据源可以有多种形式 , 比如是一个数组 , 或者是一个list 其作用是使lisview中每一行显示出数据源的每一个元素的值 。
比如ListView中每一个item只有一个控件 TextView 则list可以定义成一个字符串数组 , 或者一个ArrayList。如果ListView中每一个item有很多个控件 , 则可以把多个控件的值类型定义成一个类如Item类 格式如下public class Item{ String name; String text; int number; int imageId; //省略setter和getter方法}则此时List定义成List 并且初始化为List listItems = new ArrayList<>();并赋予值如下for(int i = 0 ; i < 10 ; i ++){ Item item = new Item(); item.setName("sqf"); item.setText("Hello World"); item.setNumber(i); item.setImageId( R.drawable.ic_launcher); listItems.add(item);}或者将多个控件的值的类型包装成Map  , 改成如下格式:List listItems = new ArrayList();Map map; for(int i=0;i<10;i++) { map = new HashMap(); map.put("imageId", R.drawable.ic_launcher); map.put("text", "hello World"); map.put("name" , "sqf"); map.put("number", i); listItems.add(map); } 此时list已经构建完毕 , 已经得到了需要加入ListView中的值了 。
步骤二 编写需要ListView布局文件以及ListView中item的布局文件ListView布局文件的例子如下:activity所在的布局XML中只需要含有listview的控件 , listview中每一行的item的具体布局则在另一个xml文件中<?xml version="1.0" encoding="utf-8"?> ListView的Item的布局文件<?xml version="1.0" encoding="utf-8"?> 步骤三 创建一个继承自BaseAdapter的类例子如下所示:private class ExampleAdapter extends BaseAdapter{ private LayoutInflater mInflater = null; private ExampleAdapter(Context context){ this.mInflater = LayoutInflater.from(context); } @Override public int getCount() { return listItems.size(); } @Override public Object getItem(int position) { return position; } @Override public long getItemId(int position) { return position; } @Override public View getView(int position, View convertView, ViewGroup parent) { return null; } }这里主要需要重写的方法有getcount 和getView 因为在绘制listview的时候需要多次调用getcount方法和getView方法 。这里getCount的返回值就是第一步里面定义的listItems大小 。
同时在这个类里定一个成员变量mInflater和一个构造方法 。layoutInflater的作用LayoutInflater的作用类似于findviewById() .不同在于LayoutInflater是用来找res/layout下的xml布局文件 , 并且实例化 。