ListView Adapter 4

GitHub

库代码链接

Gradle

compile 'com.march.adapterlibs:adapterlibs:1.0.6'

前言

  • 基于前端时间总结的EasyAdapter(看原理的可以看这些博客)重新构建了代码,基本思想还是一样的,目的是对外开放更加简单的API,其中的原理,想知晓的可以去看我以前的博客。现在的版本已经与以前的版本独立开了。

单类型抽象适配

QuickAdapter

1
2
3
4
5
6
7
8
9
10
11
12
QuickAdapter<Demo> adapter =
new QuickAdapter<Demo>(BaseApplication.getInst(), R.layout.item_quickadapter, data) {
@Override
public void bindData4View(ViewHolder holder, Demo data, int pos) {
holder.setText(R.id.item_quickadapter_title, data.getmDemoTitle());
}

@Override
public void bindListener4View(ViewHolder holder, Demo data, int pos) {
//在这里给内部控件绑定监听不是必须实现的
}
};

使用QuickTypeAdapter

  • QuickTypeAdapter的带layout资源参数构造方法,注意不要调用addType了,实体类需要实现QuickInterface接口
1
2
3
4
5
6
7
8
9
10
11
QuickTypeAdapter<Demo> typeAdapter =
new QuickTypeAdapter<Demo>(BaseApplication.getInst(), data,R.layout.item_a) {
@Override
public void bindData4View(ViewHolder holder, Demo data, int type, int pos) {
//单类型,type一直返回0
}
@Override
public void bindListener4View(ViewHolder holder, Demo data, int type, int pos) {
//在这里给内部控件绑定监听不是必须实现的
}
};

多类型适配

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
//实体类需要实现QuickInterface接口
QuickTypeAdapter<Demo> typeAdapter =
new QuickTypeAdapter<Demo>(BaseApplication.getInst(), data) {
@Override
public void bindData4View(ViewHolder holder, Demo data, int type, int pos) {
switch (type) {
case Demo.CODE_DETAIL:
holder.setText(R.id.item_quickadapter_type_title, data.getmDemoTitle());
break;
case Demo.JUST_TEST:
holder.setText(R.id.item_quickadapter_title, data.getmDemoTitle());
break;
}
}

@Override
public void bindListener4View(ViewHolder holder, Demo data, int type, int pos) {
//在这里给内部控件绑定监听不是必须实现的
}
};
//添加每种类型的xml文件
typeAdapter.addType(Demo.CODE_DETAIL, R.layout.item_quickadapter_type)
.addType(Demo.JUST_TEST, R.layout.item_quickadapter);

加载网络图片

  • 可以提前创建图片加载工具,然后调用ViewHodler.setImg()方法可以直接加载
1
2
3
4
5
6
7
8
//你可以在Activity或者Application调用这段代码进行全局配置,第二次调用会将以前的设置覆盖,所以只需要执行一次
Quick.init(new Quick.QuickLoad() {
@Override
public void load(Context context, String url, ImageView view) {
Log.e("chendong","加载图片");
Glide.with(context).load("http://www.fresco-cn.org/static/fresco-logo.png").into(view);
}
});

更新使用方法

1
2
3
4
5
6
7
8
9
10
11
12
13
//Demo类是我的实体类
//如果你使用的控件ViewHolder没有为你集成,如何避免强转?使用泛型解决
holder.<Button>getView(R.id.abc).setText("");

//设置监听事件
public ViewHolder setLis(int resId,View.OnClickListener listener,Object tag)//带有tag监听
public ViewHolder setLis(int resId,View.OnClickListener listener)//不带tag监听
public ViewHolder setTag(int resId, Object tag)//给控件设置tag
public <T> T getTag(int resId)//从ViewHolder获取tag,包含泛型,你可以这样holder.<Demo>getTag(R.id.xxx)

//如果你在控件中设置了tag,当你在适配器外部使用tag时务必使用改方法获取,用来替代view.getTag()方法,
包含泛型,你可以这样用 Quick.<Demo>getTagOutOfAdapter(listView);
Quick.getTagOutOfAdapter(View view)
------ 本文结束 🎉🎉 谢谢观看  ------