以最有效的方式实现多个视图和视图

时间:2018-04-24 20:46:59

标签: c# android views android-viewholder

我对如何使用C#实现我的应用所需的视图持有人有所怀疑。

我有三个片段,每个片段都实现了一个Recyclerview,让我们称它们为1,2,3和4。 我有四种不同类型的对象:A,B,C和D.它们都存储在同一个集合中。

片段1的回收者视图应该包含所有这些视图。

片段2应该只包含A.

片段3应该包含B。

片段4应该只包含C和D.

正如您所看到的,多个片段最终包含相同类型的对象。 现在我想知道,最好是将一个视图库存放在一个文件夹中,让我们说对象A让1和2可以访问它,或者为每个片段实现两个视图更好,即使这些观看者是一样的吗?

现在让我们假设A和B具有相同的确切布局结构,但在与之交互时表现不同,我100%确定A和B将始终具有相同的布局结构。最好是有两个视图并使片段检查我从集合中获得了什么样的对象,以便它可以选择正确的视图,或者更好的是拥有一个可用于A和B的通用单一视图,然后最终检查它是否持有A或B并实施其行为。

让我们说通用的viewholder选项更好,C类似于A和B,但不一样,它们共享80%的布局。是否仍然建议在这里使用通用视图? C有额外的观点需要显示哪个A和B平原没有。 如果有一个布局将这些额外的视图设置为已经消失,然后在我有C的情况下变为可见并且如果我有A和B则保持不变? A和B在布局中是否具有永久GONE状态的这些额外元素会影响性能吗? 对不起,这部分更多的是关于GONE状态如何与内存交互的问题。

对于文本墙感到抱歉,这只是一个关于性能的问题,而不是从开发人员的角度来看哪种架构更有用。

1 个答案:

答案 0 :(得分:0)

你需要使用这样的东西

For Fragment 1

您的RecyclerView适配器应具有类似的内容

private final int objA = 1;
private final int objB = 2;
private final int objC = 3;
private final int objD = 4;

@Override
public int getItemViewType(int position) {
   Object obj = list.get(position);
   if(obj instanceof A){
       return objA;
    }      
}

@Override
public void onBindViewHolder(RecyclerView.ViewHolder holder, int position) {
   int type = getItemViewType(position);
   if(type==objA){
      //then show the object
   }
}

最好为每个RecyclerView适配器使用1个ViewHolder