我需要一个View Type的解释

时间:2017-09-25 15:21:26

标签: android android-recyclerview

我没有找到任何解释视图类型的内容,它必须用来区分视图以便在有多个视图时显示,在这种情况下,可以使用传递给onCreateViewHolder的viewType:

onCreateViewHolder(ViewGroup parent,int viewType)

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

因此,看来View Type是由Android设置的,只有某些类型。

  1. 什么是原生类型及其价值?我无法在Android的文档中找到任何定义这些原生代码的内容。

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

  3. 我根本不了解“查看类型”,并希望得到一个很好的解释。例如,从Android API指南中获取getItemViewType的返回值:

    "整数值,用于标识表示位置项目所需的视图类型。类型代码不必是连续的。"

    这甚至意味着什么?我还没有发现任何可以解释它来自何处或如何设置的内容,甚至可以设置它。

2 个答案:

答案 0 :(得分:1)

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

    /// 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视图,那就很容易了。

答案 1 :(得分:1)

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

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