Android中ListView通用adapter的实现
来源:互联网 发布:梦幻西游鼠标偏移源码 编辑:程序博客网 时间:2024/04/28 16:42
Android开发中我们经常会用到listView进行数据的展示,有的甚至一个页面中有两个listView。使用listView或者gridview都要为其设计实现数据适配器Adapter,项目中写Adapter是难免的(根据自己item的布局),也可以使用系统提供的一些但有一些局限,为了减少代码量所以有必要设计通用的adapter!!!
因为数据大多数是存在list集合中并且数据类型是根据业务需求而定的(大多数是javaBean),所以设计的CommonAdapter类使用了泛型。具体代码如下:
package com.example.zhangfq.myapplication;import android.content.Context;import android.util.SparseArray;import android.view.LayoutInflater;import android.view.View;import android.view.ViewGroup;import android.widget.BaseAdapter;import android.widget.ImageView;import android.widget.TextView;import java.util.List;/** * Created by zhangfq on 2016/8/17. */abstract class CommonAdapter<T> extends BaseAdapter { private List<T> mDatas;//数据集合,一般T为javaBean对象 private LayoutInflater inflater;//布局填充器 private Context context; private int layoutID;//item布局资源id public CommonAdapter(Context context, List<T> mDatas, int layoutID) { this.mDatas = mDatas; this.context = context; this.layoutID = layoutID; inflater = LayoutInflater.from(context); } @Override public int getCount() { return mDatas.size(); } @Override public T getItem(int position) { return mDatas.get(position); } @Override public long getItemId(int position) { return position; } @Override public View getView(int position, View convertView, ViewGroup parent) { ViewHolder holder = ViewHolder.get(context, position, convertView, parent, layoutID); convert(holder, getItem(position)); return holder.getConverView(); } public abstract void convert(ViewHolder holder, T t); /** * 自定义ViewHolder进行数据绑定 */ static class ViewHolder { private SparseArray<View> mViews;//用于存储item中的view对象 private View mConvertView;//设计用于重用item private int position;//对外提供 public ViewHolder(Context context, int position, ViewGroup parent, int layoutID) { mViews = new SparseArray<>(); mConvertView = LayoutInflater.from(context).inflate(layoutID, parent, false); mConvertView.setTag(this); this.position = position; } public int getPosition() { return position; } public View getConverView() { return mConvertView; } public static ViewHolder get(Context context, int position, View convertView, ViewGroup parent, int layoutID) { ViewHolder holder; if (null == convertView) { holder = new ViewHolder(context, position, parent, layoutID); } else { holder = (ViewHolder) convertView.getTag(); holder.position = position; } return holder; } public <T extends View> T getView(int viewID) { View view = mViews.get(viewID); if (null == view) { view = mConvertView.findViewById(viewID); mViews.put(viewID, view); } return (T) view; } public ViewHolder setTextView(int viewID, String text) { TextView textView = getView(viewID); textView.setText(text); return this; } public ViewHolder setImageResource(int viewID, int resourceID) { ImageView imageView = getView(viewID); imageView.setImageResource(resourceID); return this; } }}
代码可以直接复制到工程中使用,如果项目中的item不止有textView和ImageView控件也可以自己添加(若有其他复杂的逻辑可能要修改一些代码逻辑)
commonAdapter是一个抽象类,使用的时候实现convert方法就行,如果为了减少代码可以直接使用匿名内部类实现。在activity中使用代码如下:
public class MainActivity extends Activity { @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); ListView lv = (ListView) findViewById(R.id.lv); List<String> datas = new ArrayList<>(); for (int i = 0; i < 20; i++) { datas.add("zhangsan" + i); } CommonAdapter mAdapter = new CommonAdapter<String>(this, datas, R.layout.item) { @Override public void convert(ViewHolder holder, String s) { holder.setTextView(R.id.tv, s); } }; lv.setAdapter(mAdapter); }}
除了使用这个通用adapter,大家也可以考虑使用并扩展RecyclerView.ViewAdaper,RecyclerView也是一个比较好用的控件,高度的解耦,给予你充分的定制自由。
0 0
- Android中ListView通用adapter的实现
- Android中适用于ListView、GridView等组件的通用Adapter
- Android中适用于ListView、GridView等组件的通用Adapter
- Android中适用于ListView、GridView等组件的通用Adapter
- 通用Adapter的实现套路(ListView篇)
- Android ListView的通用适配器Adapter
- 关于android中listview的adapter如何通用的一些看法
- 关于android中ListView的Adapter如何设计能通用的一些看法
- Android中适用于ListView、GridView等组件的通用Adapter (转)
- ListView(二)通用的Adapter
- 通用于ListView的Adapter
- Android中ListView的Adapter和ContextMenu
- 封装一个通用的 listview/gridview Adapter
- 实现RecyclerView 的通用Adapter
- 通用ListView Adapter
- ListView 通用Adapter封装
- Android中自定义Adapter实现ListView动态刷新进度条
- ANDROID中自定义ADAPTER实现LISTVIEW动态刷新进度条
- Java中日期的几种常见操作 —— 取值、转换、加减、比较
- 电脑启动快捷键一览表
- 给定一个 ArrayList<Integer>的一个对象,实现在这个集合中添加一个字符串
- 旋转卡壳算法
- 【分治策略】归并排序算法总结
- Android中ListView通用adapter的实现
- usb摄像头---实时视频---等间隔时间提取图片
- PAT(B)1017. A除以B (20)
- 迷津叹
- excel 设计模式
- 设计模式之抽象工厂
- 获取网络日期及时间
- Jquery---$.fn---jQuery.fn.extend
- tuxian本质矩阵和基础矩阵是什么,区别是什么?