2017-09-25 78 views
-1

我还没有找到任何解释视图类型是什么,它必须用于区分不同视图之间显示多个,在这种情况下,将使用viewType传递给onCreateViewHolder:我需要解释视图类型

onCreateViewHolder(ViewGroup中父,INT viewType)

虽然存在getItemViewType方法没有setItemViewType方法。

所以,看起来类型是由Android设置的,只有某些类型。

  1. 什么是本地类型及其值?我无法在Android文档中找到定义这些本地人的任何内容。

  2. 它是如何定义各种视图的,比如一个recyclerview应该有红色背景?我创建了一个布尔值来标识应该以不同方式显示的对象,但由于onCreateViewHolder除了ViewGroup和int之外不接受任何内容,似乎没有办法做到这一点,但其他人显然不这样做。

我不明白视图类型,将不胜感激一个很好的解释。例如,从getItemViewType的Android API指南返回值:

“整数值标识需要表示位置处的项目的视图的类型。类型代码不必是连续的。”

这甚至意味着什么?我还没有找到任何解释它来自哪里或如何设置,甚至可以设置的东西。

+0

ViewType允许您在RecyclerView中拥有不同类型的视图。搜索“具有多个视图类型的RecyclerView”或类似的东西 – Eselfar

+0

我现在明白了。它只是花了我多一点时间。我犯了一个错误,认为getItemViewType只是返回所需的视图类型,而不是我需要编写的方法来确定viewType应该是什么。在可能的情况下,由存储对象中的标志设置的事件的优先级确定。 – Jeff

回答

1
  1. 没有原生视图类型。
  2. 您可以定义视图类型。假设您必须在RecyclerView中使用不同类型的项目。一个有红色背景,另一个有蓝色背景。他们根据职位交替。你会做这样的事情:

```

/// Inside the RecyclerView.Adapter code: 


    const VIEW_TYPE_BLUE = 0; 
    const VIEW_TYPE_RED = 1; 

    getItemViewType(int position) { 
     return position % 2; 
    } 

    onCreateViewHolder(ViewGroup parent, int viewType) { 
     if (viewType === VIEW_TYPE_BLUE) { 
     // create blue view. 
     } else { 
     // create red view. 
     } 
    } 

```

这将允许你做各种定制。例如,如果您在RecyclerView的顶部有一个header视图,那么这很容易。

+0

好的。得到它了。它花了一段时间,但以您呈现getItemViewType单击的方式。我用它来检查一个标志的值,然后相应地分配返回值,viewType。我只是比一些人更密集。谢谢! – Jeff

0

ViewType由您定义。它基本上是一个枚举。如果所有项目都具有相同的视图,则可以忽略它并为getItemViewType返回1。如果您对不同的项目有不同的视图,则只需为每个视图返回一个唯一值。

每个值都无关紧要 - Android不知道或不在乎。它只是将它用作哈希查找中的关键字,以告诉回收的视图类型

+0

感谢您的时间,我现在明白了。实际上getItemViewType方法实际上是什么都没有,直到你们三个人的回答。 – Jeff