【问题标题】:I need an explanation of View Type我需要一个视图类型的解释
【发布时间】:2017-09-25 15:21:25
【问题描述】:

我还没有找到任何解释 View Type 是什么的东西,当有多个视图时,它必须用于区分要显示的视图,在这种情况下,可以使用传递给 onCreateViewHolder 的 viewType:

onCreateViewHolder(ViewGroup parent, int viewType)

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

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

  1. 什么是本机类型及其值?我在 Android 的文档中找不到任何定义这些原生的东西。

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

我根本不懂视图类型,希望能得到一个很好的解释。例如,来自 Android API 指南的 getItemViewType 返回值:

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

这到底是什么意思?我还没有找到任何解释它来自哪里或如何设置,或者即使它可以设置的东西。

【问题讨论】:

  • ViewType 允许您在 RecyclerView 中拥有不同类型的视图。搜索“具有多个视图类型的 RecyclerView”或类似的内容以获取示例
  • 我现在明白了。它只是比大多数人花的时间长一点。我错误地认为 getItemViewType 只是返回所需的视图类型,而不是作为我需要编写以确定 viewType 应该是什么的方法。在可能的情况下,由存储对象中的标志设置的事件的优先级确定。

标签: android android-recyclerview


【解决方案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 视图,它会变得很容易。

【讨论】:

  • 好的。知道了。花了一段时间,但您呈现 getItemViewType 的方式被点击了。我用它来检查标志的值,然后相应地分配返回值 viewType。我只是比一些人更密集。谢谢!
【解决方案2】:

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

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

【讨论】:

  • 感谢您的宝贵时间,我知道了。 getItemViewType 方法实际上是什么,直到你们三个回应我才发现。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2012-03-11
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2023-03-07
  • 2016-06-19
  • 2011-11-01
相关资源
最近更新 更多