Most visited

Recently visited

RecyclerView.ViewHolder

public static abstract class RecyclerView.ViewHolder
extends Object

java.lang.Object
   ↳ android.support.v7.widget.RecyclerView.ViewHolder
Known Direct Subclasses


ViewHolder描述了一个项目视图和关于它在RecyclerView中的位置的元数据。

RecyclerView.Adapter实现应继承ViewHolder的子类,并添加用于缓存潜在成本高昂的 findViewById(int)结果的字段。

虽然RecyclerView.LayoutParams属于RecyclerView.LayoutManagerViewHolders属于适配器。 适配器应该可以随意使用自己的自定义ViewHolder实现来存储使绑定视图内容更容易的数据。 实现应该假定单个项目视图将持有对ViewHolder对象的强引用,并且RecyclerView实例可能会持有对用于高速缓存目的的额外屏幕外项目视图的强引用

Summary

Fields

public final View itemView

Public constructors

RecyclerView.ViewHolder(View itemView)

Public methods

final int getAdapterPosition()

返回由此ViewHolder表示的项目的适配器位置。

final long getItemId()

返回此ViewHolder表示的itemId。

final int getItemViewType()
final int getLayoutPosition()

根据最新的布局传递返回ViewHolder的位置。

final int getOldPosition()

当LayoutManager支持动画时,RecyclerView追踪ViewHolders的3个位置来执行动画。

final int getPosition()

此方法已弃用。 由于适配器更新的异步处理,此方法的含义不明确,因此不推荐使用此方法。 根据您的使用情况,请使用getLayoutPosition()getAdapterPosition()

final boolean isRecyclable()
final void setIsRecyclable(boolean recyclable)

通知回收商这个项目是否可以回收。

String toString()

返回对象的字符串表示形式。

Inherited methods

From class java.lang.Object

Fields

itemView

View itemView

Public constructors

RecyclerView.ViewHolder

RecyclerView.ViewHolder (View itemView)

Parameters
itemView View

Public methods

getAdapterPosition

int getAdapterPosition ()

返回由此ViewHolder表示的项目的适配器位置。

请注意,这可能与 getLayoutPosition()不同,如果有未决的适配器更新,但尚未发生新的布局传递。

在下一次布局遍历之前,RecyclerView不处理任何适配器更新。 这可能会在用户在屏幕上看到的内容与适配器内容具有的内容之间产生暂时的不一致。 这种不一致并不重要,因为它会小于16毫秒,但如果您想使用ViewHolder位置访问适配器,可能会出现问题。 有时,您可能需要获得确切的适配器位置才能响应用户事件执行一些操作。 在这种情况下,您应该使用此方法来计算ViewHolder的适配器位置。

请注意,如果您调用了 notifyDataSetChanged() ,则在下一个布局通过之前,此方法的返回值将为 NO_POSITION

Returns
int The adapter position of the item if it still exists in the adapter. NO_POSITION if item has been removed from the adapter, notifyDataSetChanged() has been called after the last layout pass or the ViewHolder has already been recycled.

getItemId

long getItemId ()

返回此ViewHolder表示的itemId。

Returns
long The the item's id if adapter has stable ids, NO_ID otherwise

getItemViewType

int getItemViewType ()

Returns
int The view type of this ViewHolder.

getLayoutPosition

int getLayoutPosition ()

根据最新的布局传递返回ViewHolder的位置。

此位置主要由RecyclerView组件使用以保持一致,而RecyclerView懒散地处理适配器更新。

出于性能和动画方面的原因,RecyclerView会对所有适配器更新进行批处理,直到下一次布局通过。 这可能会导致项目的适配器位置与其在最新布局计算中的位置不匹配。

LayoutManagers应始终在根据项目位置进行计算时调用此方法。 在所有方法RecyclerView.LayoutManagerRecyclerView.StateRecyclerView.Recycler接收的位置期望它是该项目的布局位置。

如果LayoutManager需要调用需要项目适配器位置的外部方法,则它可以使用 getAdapterPosition()convertPreLayoutPositionToPostLayout(int)

Returns
int Returns the adapter position of the ViewHolder in the latest layout pass.

也可以看看:

getOldPosition

int getOldPosition ()

当LayoutManager支持动画时,RecyclerView追踪ViewHolders的3个位置来执行动画。

如果在之前的onLayout调用中布置了ViewHolder,则旧位置将保持其适配器索引位于先前的布局中。

Returns
int The previous adapter index of the Item represented by this ViewHolder or NO_POSITION if old position does not exists or cleared (pre-layout is complete).

getPosition

int getPosition ()

此方法已弃用。
由于适配器更新的异步处理,此方法的含义不明确,因此不推荐使用此方法。 根据您的使用情况,请使用getLayoutPosition()getAdapterPosition()

Returns
int

也可以看看:

isRecyclable

boolean isRecyclable ()

Returns
boolean true if this item is available to be recycled, false otherwise.

也可以看看:

setIsRecyclable

void setIsRecyclable (boolean recyclable)

通知回收商这个项目是否可以回收。 在setIsRecyclable()稍后设置为true之前,不能对其他项目重用视图。 对setIsRecyclable()的调用应始终配对(对setIsRecyclabe(false)的一次调用应始终与以后对setIsRecyclable(true)的调用相匹配)。 成对的调用可能是嵌套的,因为该状态是内部引用计数的。

Parameters
recyclable boolean: Whether this item is available to be recycled. Default value is true.

toString

String toString ()

返回对象的字符串表示形式。 一般来说, toString方法会返回一个“文本表示”该对象的字符串。 结果应该是一个简洁但内容丰富的表述,对于一个人来说很容易阅读。 建议所有子类重写此方法。

对于类ObjecttoString方法返回一个字符串,其中包含对象为实例的类的名称,符号字符“ @ ”以及对象的哈希代码的无符号十六进制表示形式。 换句话说,这个方法返回一个字符串,其值等于:

 getClass().getName() + '@' + Integer.toHexString(hashCode())
 

Returns
String a string representation of the object.

Hooray!