这两天有比较闲就整理了一下最近新写的一个Recyclview复杂布局。上一个项目就是由于同事把布局写死还不支持实时刷新导致改了又改。这回打算写一下recyclview的多个布局。首先查了一下相关资料,当 item 的布局方式不一样的时候,需在 onCreateViewHolder 中 通过参数 viewType 判断布局类型。
@Overridepublic intgetItemViewType(intposition) {returnhomeKinds.get(position).getType();}
该方法返回的就是布局类型,然后在onCreateViewHolder 中进行判断
@OverridepublicRecyclerView.ViewHolderonCreateViewHolder(ViewGroup parent, intviewType) {
View view =null;RecyclerView.ViewHolder holer =null;Log.e("onCreateViewHolder: ",viewType +"");
switch(viewType) {
caseHomeBean.ARTICLE:
view = LayoutInflater.from(parent.getContext()).inflate(R.layout.item_home_article,parent, false);
holer =newHAHolder(view,myItemClickListener);break;
caseHomeBean.HOSPTAL:
view = LayoutInflater.from(parent.getContext()).inflate(R.layout.item_teethhos,parent, false);
holer =newTTHolder(view,myItemClickListener);
break;
caseHomeBean.LIVE:
view = LayoutInflater.from(parent.getContext()).inflate(R.layout.item_home_live,parent, false);
holer =newHLHolder(view,myItemClickListener);
break;
caseHomeBean.CIRCLE:
view = LayoutInflater.from(parent.getContext()).inflate(R.layout.item_frinder,parent, false);
holer =newFHolder(view,myItemClickListener);
break;
caseHomeBean.ONLINE:
view = LayoutInflater.from(parent.getContext()).inflate(R.layout.item_homeonline,parent, false);
holer =newHOHolder(view,myItemClickListener);break;}
return holer;
}
可以看到我这里有5个不一样的item,接下来就是为每个不同的布局加载数据:
public voidonBindViewHolder(RecyclerView.ViewHolder holder, intposition) {
switch(getItemViewType(position)) {
caseHomeBean.ARTICLE:
HAHolder hlHolder = (HAHolder) holder;
hlHolder.name.setText(homeKinds.get(position).getIconname());
Glide.with(mContext).load(homeKinds.get(position).getIconimage()).into(hlHolder.icon);
Glide.with(mContext).load(homeKinds.get(position).getArticleimage()).into(hlHolder.articleimage);
hlHolder.articletime.setText(homeKinds.get(position).getArticletime());
hlHolder.articletext.setText(homeKinds.get(position).getArticlecontent());
break;
}
由于代码太多就不全部贴在这了;
下面给大家看一下数据对象的部分代码;
数据类型,由于返回的是5个对象。自己就又写了一个对象所有数据都添加到自己的Bean里:
public classHomeBean {
public static final intARTICLE=0;//view类型0
public static final intHOSPTAL=1;//view类型2
public static final intLIVE=2;//view 类型3
public static final intCIRCLE=3;//view类型2
public static final intONLINE=4;//view 类型3
省略部分数据代码
}
接下来给大家看一下效果
本人也是第一次写这种多布局的recyclview,有不足的地方希望大家多多包涵,同事也希望大家能多给建议。