标签:cas gate temp 代理类 list 通过 oid setimage ase
对于多布局,提供了:
BaseMultiItemQuickAdapter
、BaseDelegateMultiAdapter
、BaseProviderMultiAdapter
三种基础类型。
说明:适用于类型较少,业务不复杂的场景,便于快速使用。
所有的数据类型,都必须实现MultiItemEntity
接口(注意,这里不是继承抽象类,而是实现接口,避免对业务的实体类带来影响)
public class MultipleItemQuickAdapter extends BaseMultiItemQuickAdapter<QuickMultipleEntity, BaseViewHolder> {
public MultipleItemQuickAdapter(List<QuickMultipleEntity> data) {
super(data);
// 绑定 layout 对应的 type
addItemType(QuickMultipleEntity.TEXT, R.layout.item_text_view);
addItemType(QuickMultipleEntity.IMG, R.layout.item_image_view);
addItemType(QuickMultipleEntity.IMG_TEXT, R.layout.item_img_text_view);
}
@Override
protected void convert(@NonNull BaseViewHolder helper, QuickMultipleEntity item) {
// 根据返回的 type 分别设置数据
switch (helper.getItemViewType()) {
case QuickMultipleEntity.TEXT:
helper.setText(R.id.tv, item.getContent());
break;
case QuickMultipleEntity.IMG_TEXT:
...
...
break;
default:
break;
}
}
}
数据实体类写法:
class 你的数据实体类 implements MultiItemEntity {
// 你的数据内容
...
...
/**
* 实现此方法,返回类型
*/
@Override
public int getItemType() {
return itemType;
}
}
说明:通过代理类的方式,返回布局 id 和 item 类型;
适用于:
1、实体类不方便扩展,此Adapter的数据类型可以是任意类型,只需要在BaseMultiTypeDelegate.getItemType
中返回对应类型
2、item 类型较少
如果类型较多,为了方便隔离各类型的业务逻辑,推荐使用BaseProviderMultiAdapter
public class DelegateMultiAdapter extends BaseDelegateMultiAdapter<DelegateMultiEntity, BaseViewHolder> {
public DelegateMultiAdapter() {
super();
// 第一步,设置代理
setMultiTypeDelegate(new BaseMultiTypeDelegate<DelegateMultiEntity>() {
@Override
public int getItemType(@NotNull List<? extends DelegateMultiEntity> data, int position) {
// 根据数据,自己判断应该返回的类型
switch (position % 3) {
case 0:
return DelegateMultiEntity.TEXT;
case 1:
return DelegateMultiEntity.IMG;
case 2:
return DelegateMultiEntity.IMG_TEXT;
default:
break;
}
return 0;
}
});
// 第二部,绑定 item 类型
getMultiTypeDelegate()
.addItemType(DelegateMultiEntity.TEXT, R.layout.item_text_view)
.addItemType(DelegateMultiEntity.IMG, R.layout.item_image_view)
.addItemType(DelegateMultiEntity.IMG_TEXT, R.layout.item_img_text_view);
}
@Override
protected void convert(@NotNull BaseViewHolder helper, @NotNull DelegateMultiEntity item) {
switch (helper.getItemViewType()) {
case QuickMultipleEntity.TEXT:
helper.setText(R.id.tv, "CymChad " + helper.getAdapterPosition());
break;
case QuickMultipleEntity.IMG_TEXT:
switch (helper.getLayoutPosition() % 2) {
case 0:
helper.setImageResource(R.id.iv, R.mipmap.animation_img1);
break;
case 1:
helper.setImageResource(R.id.iv, R.mipmap.animation_img2);
break;
default:
break;
}
helper.setText(R.id.tv, "ChayChan " + helper.getAdapterPosition());
break;
default:
break;
}
}
}
public class DelegateMultiAdapter extends BaseDelegateMultiAdapter<DelegateMultiEntity, BaseViewHolder> {
public DelegateMultiAdapter() {
super();
// 实现自己的代理类:
setMultiTypeDelegate(new MyMultiTypeDelegate());
}
@Override
protected void convert(@NotNull BaseViewHolder helper, @NotNull DelegateMultiEntity item) {
switch (helper.getItemViewType()) {
case QuickMultipleEntity.TEXT:
helper.setText(R.id.tv, "CymChad " + helper.getAdapterPosition());
break;
case QuickMultipleEntity.IMG_TEXT:
switch (helper.getLayoutPosition() % 2) {
case 0:
helper.setImageResource(R.id.iv, R.mipmap.animation_img1);
break;
case 1:
helper.setImageResource(R.id.iv, R.mipmap.animation_img2);
break;
default:
break;
}
helper.setText(R.id.tv, "ChayChan " + helper.getAdapterPosition());
break;
default:
break;
}
}
// 方式二:实现自己的代理类
final static class MyMultiTypeDelegate extends BaseMultiTypeDelegate<DelegateMultiEntity> {
public MyMultiTypeDelegate() {
// 绑定 item 类型
addItemType(DelegateMultiEntity.TEXT, R.layout.item_text_view);
addItemType(DelegateMultiEntity.IMG, R.layout.item_image_view);
addItemType(DelegateMultiEntity.IMG_TEXT, R.layout.item_img_text_view);
}
@Override
public int getItemType(@NotNull List<? extends DelegateMultiEntity> data, int position) {
switch (position % 3) {
case 0:
return DelegateMultiEntity.TEXT;
case 1:
return DelegateMultiEntity.IMG;
case 2:
return DelegateMultiEntity.IMG_TEXT;
default:
break;
}
return 0;
}
}
}
说明:当有多种条目的时候,避免在convert()
中做太多的业务逻辑,把逻辑放在对应的 ItemProvider
中。以及最大化自定义VH
类型。
1、此Adapter
的数据类型可以是任意类型,只需要在getItemType
中返回对应类型
2、Adapter
不限定ViewHolder
类型。ViewHolder
由 BaseItemProvider
实现,并且每个BaseItemProvider
可以拥有自己类型的ViewHolder
类型。
Adapter
代码如下:public class ProviderMultiAdapter extends BaseProviderMultiAdapter<ProviderMultiEntity> {
public ProviderMultiAdapter() {
super();
// 注册 Provider
addItemProvider(new ImgItemProvider());
addItemProvider(new TextImgItemProvider());
addItemProvider(new TextItemProvider());
}
/**
* 自行根据数据、位置等信息,返回 item 类型
*/
@Override
protected int getItemType(@NotNull List<? extends ProviderMultiEntity> data, int position) {
switch (position % 3) {
case 0:
return ProviderMultiEntity.IMG;
case 1:
return ProviderMultiEntity.TEXT;
case 2:
return ProviderMultiEntity.IMG_TEXT;
default:
break;
}
return 0;
}
}
Provider
代码如下:public class ImgItemProvider extends BaseItemProvider<ProviderMultiEntity> {
// item 类型
@Override
public int getItemViewType() {
return ProviderMultiEntity.IMG;
}
// 返回 item 布局 layout
@Override
public int getLayoutId() {
return R.layout.item_image_view;
}
/*
* (可选)
* 重写返回自己的 ViewHolder。
* 默认返回 BaseViewHolder()
*/
@NotNull
@Override
public BaseViewHolder onCreateViewHolder(@NotNull ViewGroup parent) {
return super.onCreateViewHolder(parent);
}
@Override
public void convert(@NotNull BaseViewHolder helper, @NotNull ProviderMultiEntity data) {
// 设置 item 数据
if (helper.getAdapterPosition() % 2 == 0) {
helper.setImageResource(R.id.iv, R.mipmap.animation_img1);
} else {
helper.setImageResource(R.id.iv, R.mipmap.animation_img2);
}
}
// 点击 item 事件
@Override
public void onClick(@NotNull BaseViewHolder helper, @NotNull View view, ProviderMultiEntity data, int position) {
Tips.show("Click: " + position);
}
@Override
public boolean onLongClick(@NotNull BaseViewHolder helper, @NotNull View view, ProviderMultiEntity data, int position) {
Tips.show("Long Click: " + position);
return true;
}
}
标签:cas gate temp 代理类 list 通过 oid setimage ase
原文地址:https://www.cnblogs.com/wzqnxd/p/13260701.html