- 支持不同的 ViewType
从 gif 效果图中,我们可以看到,一共有三种 type:
-
只含有 TextView
-
含有一个 ImageView 和 TextView
-
含有两个 TextView 和 一个ImageView
要想实现上述效果,需要两个步骤:
第一步:继承于 ItemViewDelegate,重写 getItemViewLayoutId,isForViewType,convert方法,其中 getItemViewLayoutId 方法表示返回布局 layoutId,convert 方法在刷新当前 View 的时候会调用,可以用来刷新数据
/**
- Created by xujun on 1/9/2018$ 18:25$.
*/
public class TextItemViewDelegate implements ItemViewDelegate {
@Override
public int getItemViewLayoutId() {
return R.layout.item_simple_text;
}
@Override
public boolean isForViewType(MultiTypeBean item, int position) {
return item.mItemViewType == MultiTypeBean.ItemViewType.text;
}
@Override
public void convert(ViewHolder holder, MultiTypeBean multiTypeBean, int position) {
TextView tv = holder.getView(R.id.tv);
tv.setText(multiTypeBean.title);
}
}
public class ImageTextItemViewDelegate implements ItemViewDelegate {
@Override
public int getItemViewLayoutId() {
return R.layout.item_image_text;
}
@Override
public boolean isForViewType(MultiTypeBean item, int position) {
return item.mItemViewType == MultiTypeBean.ItemViewType.imageText;
}
@Override
public void convert(ViewHolder holder, MultiTypeBean multiTypeBean, int position) {
TextView tv = holder.getView(R.id.tv);
tv.setText(multiTypeBean.title);
ImageView iv = holder.getView(R.id.iv);
iv.setImageResource(multiTypeBean.resImageId);
}
}
public class MultiTextItemViewDelegate implements ItemViewDelegate {
@Override
public int getItemViewLayoutId() {
return R.layout.item_multi_text;
}
@Override
public boolean isForViewType(MultiTypeBean item, int position) {
re
turn item.mItemViewType == MultiTypeBean.ItemViewType.multiTextAndImage;
}
@Override
public void convert(ViewHolder holder, MultiTypeBean multiTypeBean, int position) {
TextView tv = holder.getView(R.id.tv);
tv.setText(multiTypeBean.title);
TextView tvContent = holder.getView(R.id.tv_content);
tvContent.setText(multiTypeBean.content);
ImageView iv = holder.getView(R.id.iv);
iv.setImageResource(multiTypeBean.resImageId);
}
}
第二步:将 ItemViewDelegate 添加到 Multi