向recyclerview添加多个不同的CardView

lsmd5eda  于 2021-07-03  发布在  Java
关注(0)|答案(2)|浏览(285)

我有一个 RecyclerView 我想补充一点 RecyclerView 多个不同的 CardViews . 假设我有 cardview1.xml , cardview2.xml , cardview3.xml 每个 ViewCard 有一个班级 variables 对于 ViewCard 这些类是从我创建的没有属性的cardwiew类扩展而来的。
我想加一个 RecyclerViewcardview1 , 2 cardview2 , 4 cardview3 .
我想知道如何在我的生活中做到这一点 Adapter 卡片视图1:

public class CardView1 extends CardView {

    public CardView1(){

    }

}

卡片视图2:

public class CardView2 extends CardView {

    public CardView2(){

    }
}

卡片视图3:

public class CardView3 extends CardView {
    private String number;

    public CardView3(String number){
        this.number = number;
    }

    public String getNumber() {
        return number;
    }

}

如果你需要我添加任何代码,请告诉我。

a14dhokn

a14dhokn1#

你可以通过这种方式来实现它
首先在模型类名中添加3个整数变量 type 物品类型1和物品类型2。给…赋值 type 根据你的需要。分别与视图类型1和视图类型2的项目类型1或项目类型2相似。

public class Model{
        String SmsAddress;
        String KoreaImage;
        String seasonNumber;
        Integer type;
        public  static final Integer ITEM_TYPE_1=1;
        public  static final Integer ITEM_TYPE_2=2;

        public String getSmsAddress() {
            return SmsAddress;
        }

        public void setSmsAddress(String smsAddress) {
            SmsAddress = smsAddress;
        }

        public String getKoreaImage() {
            return KoreaImage;
        }

        public void setKoreaImage(String koreaImage) {
            KoreaImage = koreaImage;
        }

        public String getSeasonNumber() {
            return seasonNumber;
        }

        public void setSeasonNumber(String seasonNumber) {
            this.seasonNumber = seasonNumber;
        }

        public Integer getType() {
            return type;
        }

        public void setType(Integer type) {
            this.type = type;
        }
    }

在适配器上,您可以覆盖 getItemViewType() 以及 onCreateViewHolder ()方法并应用一个开关盒,用于通过ViewHolder进行视图膨胀和数据显示。

@Override
    public int getItemViewType(int position) {
        switch (modelList.get(position).getType()) {
            case 0:
                return Model.ITEM_TYPE_1;
            case 1:
                return Model.ITEM_TYPE_2;
            default:
                return -1;
        }
    }

@Override
public RecyclerView.ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
    View view;
    switch (viewType) {
        case Model.ITEM_TYPE_1:
            view = LayoutInflater.from(mContext).inflate(R.layout.item_type_1, parent, false);
            return (new Item1ViewHolder(view));

        case Model.ITEM_TYPE_2:
            view = LayoutInflater.from(mContext).inflate(R.layout.item_type_2, parent, false);
            return (new Item2ViewHolder(view));
        default:
            return null;
    }
}

有关更多详细信息,请参见以下链接:
见详图

kokeuurv

kokeuurv2#

可以将arraylist传递给适配器。此arraylist表示数据列表。在适配器中,只需使用gettype()知道要显示哪个cardview。例如:

YourAdapter(datas ArrayList<YourData>(),...){
onBindViewHolder(holder: RecyclerView.ViewHolder, position: Int){
     val type = getItemViewType(position)
     if(type == 0){
        //show cardview1
         YourViewHolder(LayoutInflater.from(parent.context)
                    .inflate(R.layout.cardview1, parent, false))
     }
     if(type == 1){
          YourViewHolder(LayoutInflater.from(parent.context)
                    .inflate(R.layout.cardview2, parent, false))
     }

}
@override
public Int getItemViewType(int position){

            return datas[position].type;

        }
}

之后,您的数据必须有一个方法类型(对于本例)。您可以在类型1的2个元素之后添加3个类型0的元素。。。在数组列表中。
抱歉,因为kotlin和java是混合的(但我认为您可以理解)

相关问题