我在第一个项目上工作,我想使用单个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
答案 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;
}
}