如何在单个super()中添加两个视图?

时间:2020-10-16 12:03:25

标签: android

我在第一个项目上工作,我想使用单个recyclerview适配器在两个不同的活动中显示两个回收站视图,但是在我启动第二个活动后(当单击第一个recyclerview项时)应用程序崩溃

>

java.lang.NullPointerException:尝试调用虚拟方法'void com.example.smschecker.adapters.KoreaAdapter.notifyDataSetChanged()' 在空对象引用上 在com.example.smschecker.SeasonDetails $ 1.onDataChange(SeasonDetails.java:137) 在com.google.firebase.database.core.ValueEventRegistration.fireEvent(ValueEventRegistration.java:75) 在com.google.firebase.database.core.view.DataEvent.fire(DataEvent.java:63)

我知道错误的含义,但我无法克服

在适配器中,

 @NonNull
@Override
public MyViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) {
    View itemView = LayoutInflater.from(parent.getContext()).inflate(R.layout.korea_item,parent,false);
    View itemView3 = LayoutInflater.from(parent.getContext()).inflate(R.layout.details_season_item, parent, false);
    return new MyViewHolder(itemView, itemView3);
}

public MyViewHolder(@NonNull查看itemView,查看itemView3){ super(itemView);

        SmsAddress = itemView.findViewById(R.id.koreaTitle);
        KoreaImage = itemView.findViewById(R.id.korea_image);
        progressBar = itemView.findViewById(R.id.progres_bar_korea);
        seasonNumber = itemView2.findViewById(R.id.season_number);

//这是错误的出处,因为在super(itemView)处,itemView3无法显示在第二个活动中,我在想这个super(itemView, itemView3)不能正常工作,我想在第二个Activity中显示itemView3

1 个答案:

答案 0 :(得分:0)

您可以通过这种方式实现

首先在模型类名称type ITEM_TYPE_1中添加3个整数变量,然后 ITEM_TYPE_2。根据需要为type分配一个值。分别针对视图类型1和视图类型2分别使用ITEM_TYPE_1或ITEM_TYPE_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()方法,并通过ViewHolders应用切换用例来查看视图膨胀和数据表示。

@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;
    }
}