ListView,GridView万能适配器

写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'
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值