Recyclview复杂布局的实现

本文介绍了如何在RecyclerView中实现多种不同的布局方式。针对布局不固定且需要实时刷新的需求,通过在onCreateViewHolder中根据viewType判断布局类型,并结合getItemViewType方法来实现。示例中展示了如何将五个不同数据对象整合到一个Bean中,从而达到灵活布局的效果。
摘要由CSDN通过智能技术生成

今天看到公司效果图时,是一脸懵逼。上一个项目就是由于同事把布局写死还不支持实时刷新导致改了又改。这回打算写一下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);
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值