ListView,GridView万能适配器

来源:互联网 发布:飞狐 指标数据输出 编辑:程序博客网 时间:2024/05/17 07:46

写listview的适配配器非常繁琐,并且容易出错,所以在博客上面看到了一篇非常好用的适配器
详情连接:https://github.com/hongyangAndroid/baseAdapter
http://blog.csdn.net/lmj623565791/article/details/38902805
1. 导入依赖库

compile 'com.zhy:base-adapter:3.0.3'

其实到这里基本上就完成一半了,因为它的适配方法被封装否非常好用又简单,布局和原来的没有一点变化,你可以在同一个类中定义适配:

      adapter = new CommonAdapter<String>(getApplicationContext(), R.layout.item, list) {            @Override            protected void convert(ViewHolder viewHolder, String item, final int position) {             viewHolder.setText(R.id.cont,item);                viewHolder.getView(R.id.cont).setOnClickListener(new View.OnClickListener() {                    @Override                    public void onClick(View v) {                        Toast.makeText(MainActivity.this,"点击了"+position,Toast.LENGTH_LONG).show();                    }                });            }        };
  • CommonAdapter这里的泛型是你传入的类型也可以是对象
  • R.layout.item 就是我们要适配的子布局
  • list 则是我们装数据的容器
  • viewHolder.setText(R.id.cont,item); R.id.cont:显示内容的控件 item 显示的具体内容
  • 控件的监听事件
   viewHolder.getView(R.id.cont).setOnClickListener(new View.OnClickListener() {                    @Override                    public void onClick(View v) {                        Toast.makeText(MainActivity.this,"点击了"+position,Toast.LENGTH_LONG).show();                    }                });

可见是通过 viewHolder获取listview里面的子布局并设置监听
自定义类继承适配器

public class MyAdapter extends CommonAdapter<User>  {        Context m;    public MyAdapter(Context context, int layoutId, List<User> datas) {        super(context, layoutId, datas);        this.m=context;    }    @Override    protected void convert(ViewHolder viewHolder, User item, int position) {      TextView text= viewHolder.getView(R.id.cont);        TextView texts= viewHolder.getView(R.id.age);        texts.setText(item.getAge());        text.setText(item.getName());    }}

可见基本类似定义泛型后先重写构造方法如果需要传递布局只需要加 this.m=context;
这个只是简单的适配而事实上这个万能的适配器功能远远不止于此像多条目展示,以及对RecycleView都有自己的适配方式并且类似
多条目展示

  MultiItemTypeAdapter<User> adapter = new MultiItemTypeAdapter<>(this, list);          adapter.addItemViewDelegate(new One());          adapter.addItemViewDelegate(new Two());        listView.setAdapter(adapter);
 public  class  One implements ItemViewDelegate<User>{        @Override        public int getItemViewLayoutId() {            return R.layout.item_one;        }        @Override        public boolean isForViewType(User item, int position) {            return true;//这里返回的是要加载哪一个布局        }        @Override        public void convert(ViewHolder holder, User user, int position) {            holder.setText(R.id.one_text,user.getAge());        }    }

RecyclerView的依赖库(方法类似)

compile 'com.zhy:base-rvadapter:3.0.3'
原创粉丝点击