Android - Adapter的使用

来源:互联网 发布:csgo职业选手优化fps 编辑:程序博客网 时间:2024/05/18 03:21

Adapter 的使用

在Android里面经常会用到Adapter,例如列表。

Adapter主要是实现列表里面每一个列表项的数据填充。

Adapter主要有3种常用的实现类:ArrayAdapter,SimpleAdapter,BaseAdpter。

ArrayAdapter

根据名称可以大致知道这个Adapter的用途,通常用于数组或者List集合的多个值包装成多个列表项。

对应的列表项布局通常是TextView。

核心代码如下:

// 找到布局文件中对应的列表视图ListView mListView = (ListView)FindViewById(R.id.listView);// 定义一个数据数组String[] arr = {"item1","item2","item3"};// 生成一个ArrayAdapterArrayAdapter<String> mArrayAdapter = new ArrayAdapter<String>(this, R.layout.array_item, arr);// 把ArrayAdapter装配到列表视图上mListview.setAdapter(mArrayAdapter);

SimpleAdapter

SimpleAdapter从名字看是简单,但能实现的功能不简单,不要被他的名字欺骗了。下面我们来看看他能力。

这里设计一个有图标和文字的列表项(类似桌面图标),核心代码如下:

// 列表项中的文字和图标数据String[] items_name = {"item1","item2","item3"};int[] items_image = {R.drawable.sms, R.drawable.keep, R.drawable.dropbox};// 生成一个集合对象,这里很重要!List<Map<String, Object>> listItems = new ArrayList<Map<String, Object>>();for(int i = 0; i < items_name.length; i++){    Map<String, Object> listItem = new HashMap<String, Object>();    listItem.put("image", items_image[i]);    listItem.put("name", items_name[i]);    listItems.add(listItem);}// 生成SimpleAdapter,把数据和列表项的ImageView,TextView对应起来SimpleAdapter mSimpleAdapter = new SimpleAdapter(this, listItems, R.layout.main_grid_item, new String[]{"image","name"},new int[]{R.id.item_image, R.id.item_text});// 找到列表视图GridView mGridView = (GridView)findViewById(R.id.gridView);// 装配SimpleAdaptermGridView.setAdapter(mSimpleAdapter);

BaseAdapter

BaseAdapter 能取得Adapter的最大控制权,所以学会使用BaseAdapter就能把绝对多数效果都能实现了,是不是很吸引呢?

// mainActivity.java    String[] items_name = {"item1","item2","item3"};int[] items_image = {R.drawable.sms, R.drawable.keep, R.drawable.dropbox};ListView mListView = (ListView)FindViewById(R.id.listView);MyAdapter myAdapter = new MyAdapter(this,items_name,items_image,R.layout.list_items);mListView.setAdapter(myAdapter);// MyAdapter.javapublic class MyAdapter extends BaseAdapter {    private Context mContext;    private int mLayout;    private String[] name;    private int[] image;    private LayoutInflater mLayoutInflater;    public MyAdapter(Context context, String[] s, int[] i, int itemlayout){        mContext = context;        mLayout = itemlayout;        name = s;        image = i;        mLayoutInflater = LayoutInflater.from(context);    }    // 创建这个是为了提升效率,一次查找对应视图和保存对应的指针,每次操作只需要从中读取指针地址就能操作视图中的控件    public class ViewHolder{        public TextView name;        public ImageView image;        public ViewHolder(View view){            name = (TextView)view.findViewById(R.id.tv);            image = (ImageView)view.findViewById(R.id.iv);        }    }    // 返回position处的列表项的视图    @Override    public View getView(int position, View convertView, ViewGroup parent) {        ViewHolder mViewHolder;        View mView;        if (convertView == null) {            mView = mLayoutInflater.inflate(mLayout, null);            convertView = mView;            mViewHolder = new ViewHolder(mView);            convertView.setTag(mViewHolder);        } else {            mViewHolder = (ViewHolder)convertView.getTag();        }        mViewHolder.name.setText(name[position]);        mViewHolder.image.setImageResource(image[position]);        return convertView;    }    // 有多少个列表项,很重要    @Override    public int getCount() {        return name.length;    }    // 返回position处的列表项内容    @Override    public Object getItem(int position) {        return null;    }    // 返回position处的列表项ID    @Override    public long getItemId(int position) {        return position;    }}
0 0
原创粉丝点击