我有一个RecyclerView,每个项目中都有不同的视图:不同数量的视图,不同类型和不同位置。它们来自数据库。
查看类型A, 查看类型B, 查看类型E
查看类型B, 查看类型B, 查看类型J, 查看类型C
。 。
查看类型F, 查看类型S
A例如是TextView,B是例如CheckBox ...
在Holder构造函数中,我得到项目的布局:
public ViewHolderXXX(final View itemView) {
super(itemView);
mainLayout = itemView.findViewById(R.id.ly_main_layout);
}
然后,根据视图的类型,在bindViews()中,将另一个布局添加到mainLayout并添加相应的逻辑。
if(customObject == TextView){
mainLayout.addView(layoutForTextView);
}
if(customObject == CheckBox){
mainLayout.addView(layoutForCheckBox);
}
.
.
.
TextView textView = layoutForTextView.findViewById(R.id.tv_text_view);
textView.setOnClickListener(new View.OnClickListener(){
@Override
public void onClick(View view) {
final Intent intent = new Intent(context, OtherActivity.class);
context.startActivity(intent);
}
}
此外,在Holder中,我有一个从OtherActivity调用的静态类。
public static void notifyXXX(){
//do something
}
在OtherActivity中:
ViewHolderXXX.notifyXXX();
finish();
当我返回到Holder时,这些物品会发生“奇怪的事情”。在最后一项中,有一些我尚未添加的布局。我找不到它们出现的模式。
我很困惑。我不知道我是否精心设计了Adapter和ViewHolder,或者RecyclerView是否不适合此特定任务。另外,我不得不解决其他非常复杂的问题。
答案 0 :(得分:0)
在我的情况下,解决方案是将所有三个数组列表从Object类型组合为一个,并使用适配器构造函数实例化,然后使用具有相应模型的实例检查当前位置。
@Override
public int getItemViewType(int position) {
//Gallery.Photo and Gallery.Vedio are the models
if (objects.get(position) instanceof Gallery.Photo) {
return VIEW_TYPE_PHOTO;
} else if (objects.get(position) instanceof Gallery.Vedio) {
return VIEW_TYPE_VIDEO;
} else {
return VIEW_TYPE_ESSAY;
}
}