今天看到公司效果图时,是一脸懵逼。上一个项目就是由于同事把布局写死还不支持实时刷新导致改了又改。这回打算写一下recyclview的多个布局。
首先查了一下相关资料,当 item 的布局方式不一样的时候,需在 onCreateViewHolder 中 通过参数 viewType 判断布局类型,此 viewType 和通过 getItemViewType 中返回的类型所匹配,getItemViewType 比 onCreateViewHolder 早调用。
@Override public int getItemViewType(int position) { return homeKinds.get(position).getType(); }该方法返回的就是布局类型,然后在onCreateViewHolder 中进行判断
@Override public RecyclerView.ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) { View view = null; RecyclerView.ViewHolder holer = null; Log.e("onCreateViewHolder: ", viewType + ""); switch (viewType) { case HomeBean.ARTICLE: view = LayoutInflater.from(parent.getContext()).inflate(R.layout.item_home_article, parent, false); holer = new HAHolder(view, myItemClickListener); break; case HomeBean.HOSPTAL: view = LayoutInflater.from(parent.getContext()).inflate(R.layout.item_teethhos, parent, false); holer = new TTHolder(view, myItemClickListener); break; case HomeBean.LIVE: view = LayoutInflater.from(parent.getContext()).inflate(R.layout.item_home_live, parent, false); holer = new HLHolder(view, myItemClickListener); break; case HomeBean.CIRCLE: view = LayoutInflater.from(parent.getContext()).inflate(R.layout.item_frinder, parent, false); holer = new FHolder(view, myItemClickListener); break; case HomeBean.ONLINE: view = LayoutInflater.from(parent.getContext()).inflate(R.layout.item_homeonline, parent, false); holer = new HOHolder(view, myItemClickListener); break; } return holer; }可以看到我这里有5个不一样的item,接下来就是为每个不同的布局加载数据:
@Override public void onBindViewHolder(RecyclerView.ViewHolder holder, int position) { switch (getItemViewType(position)) { case HomeBean.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; case HomeBean.HOSPTAL: TTHolder ttHolder = (TTHolder) holder; ttHolder.name.setText(homeKinds.get(position).getIconname()); Glide.with(mContext).load(homeKinds.get(position).getIconimage()).into(ttHolder.icon); ttHolder.teethaddress.setText("地址:" + homeKinds.get(position).getHosptalAddress()); ttHolder.teethprise.setText("好评:" + DecimalFormaTools.format2(homeKinds.get(position).getHosptalprise()) + "%"); Glide.with(mContext).load(homeKinds.get(position).getHosptalimage()).into(ttHolder.teethimage); ttHolder.teethyewu.setText("主营业务:" + homeKinds.get(position).getHosptalcontent()); ttHolder.teethname.setText(homeKinds.get(position).getHosptalname()); break; case HomeBean.LIVE: HLHolder hlHolder1 = (HLHolder) holder; hlHolder1.name.setText(homeKinds.get(position).getIconname()); Glide.with(mContext).load(homeKinds.get(position).getIconimage()).into(hlHolder1.icon); hlHolder1.livename.setText(homeKinds.get(position).getLivename()); Glide.with(mContext).load(homeKinds.get(position).getLiveimage()).into(hlHolder1.liveimage); hlHolder1.seenum.setText(homeKinds.get(position).getLivenum() + "人观看"); break; case HomeBean.CIRCLE: FHolder fHolder = (FHolder) holder; fHolder.name.setText(homeKinds.get(position).getIconname()); Glide.with(mContext).load(homeKinds.get(position).getIconimage()).into(fHolder.icon); fHolder.ciecleseenum.setText(homeKinds.get(position).getCirclenum() + "以浏览"); fHolder.circlecontent.setText(homeKinds.get(position).getCirclecontent()); fHolder.circletitle.setText(homeKinds.get(position).getCircletitle()); fHolder.circlehname.setText(homeKinds.get(position).getCirclename()); fHolder.circletime.setText(homeKinds.get(position).getCircletime()); Glide.with(mContext).load(homeKinds.get(position).getCircleimage()).into(fHolder.circleimage); break; case HomeBean.ONLINE: HOHolder hoHolder = (HOHolder) holder; hoHolder.name.setText(homeKinds.get(position).getIconname()); Glide.with(mContext).load(homeKinds.get(position).getIconimage()).into(hoHolder.icon);