具有视图组合的RecyclerView

时间:2019-01-31 13:04:23

标签: android android-recyclerview recycler-adapter recyclerview-layout

我有一个RecyclerView,每个项目中都有不同的视图:不同数量的视图,不同类型和不同位置。它们来自数据库。

项目1

查看类型A, 查看类型B, 查看类型E

项目2

查看类型B, 查看类型B, 查看类型J, 查看类型C

。 。

项目n

查看类型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是否不适合此特定任务。另外,我不得不解决其他非常复杂的问题。

1 个答案:

答案 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;
}
  }