RecyclerView中不同的位置概念可以协助你更有效地处置数据项和用户交互
getAdapterPosition
getAdapterPosition()是RecyclerView.ViewHolder类的一个方法,用于失掉与该ViewHolder关联的名目在适配器(Adapter)中的位置。在数据绑定、点击事情处置、以及须要知道名目在列表或网格中详细位置的其余场景中十分有用。
从RecyclerView的onBindViewHolder、onClick或其余与ViewHolder关系的回调中经常使用getAdapterPosition方法时,会前往与ViewHolder绑定的数据项在适配器中的索引。
void onBindViewHolderRecyclerViewViewHolder holder position {holderitemViewsetOnClickListenernew OnClickListener { void onClick v { adapterPosition holdergetAdapterPosition adapterPosition RecyclerViewNO_POSITION {// 处置点击事情,经常使用adapterPosition作为索引}}}}
遗憾的是getAdapterPosition方法标志为过时废除了。
getBindindAdapterPosition
getBindingAdapterPosition()是RecyclerView.ViewHolder类的一个方法,与getAdapterPosition()相似,但用途上略有不同。
RecyclerView经过LayoutManager来确定每个名目的位置和大小,并经常使用Adapter来提供数据和将数据绑定到视图上。为了提升性能,RecyclerView会复用ViewHolder对象,这象征着同一个ViewHolder实例或许会被用来绑定不同位置上的数据。
前往的是ViewHolder最后绑定数据时的适配器位置(在数据最后一次性变动后的位置)。
假设在数据变动后,ViewHolder没有被从新绑定,前往的或许是之前的位置。
只在onBindViewHolder()方法的高低文中有效。
前往的是正在绑定到ViewHolder的数据项在适配器中的位置。
在onBindViewHolder()方法之内查用此方法或许会前往RecyclerView.NO_POSITION(-1),此时ViewHolder或许没有绑定就任何数据项。
getAbsoluteAdapterPosition
getAbsoluteAdapterPosition()是RecyclerView.ViewHolder的一个方法,用于失掉与ViewHolder关联的项在适配器中的相对位置。
1.「前往值」
假设ViewHolder与某个项关联,前往一个大于或等于0的整数,示意该项在适配器中的相对位置。
假设ViewHolder没有与任何项关联(例如,由于该项曾经从列表中移除或许ViewHolder正在被回收),前往RecyclerView.NO_POSITION,其值为-1。
2.「留意事项」
getAbsoluteAdapterPosition()思考了嵌套的RecyclerView层级,前往的位置或许与间接经过getAdapterPosition()取得的位置不同。
当处置嵌套RecyclerView的交互或数据时,经常使用getAbsoluteAdapterPosition()可以确保失掉到的是全局的、惟一的位置。
getAbsoluteAdapterPosition()也或许在ViewHolder被回收或没有与任何项关联时前往RecyclerView.NO_POSITION,在经常使用其前往值之前应启动审核。
getLayoutPosition
getLayoutPosition()是RecyclerView.ViewHolder类的一个方法,用于失掉ViewHolder在的规划中的位置。这个位置是基于屏幕上可见的项和RecyclerView的滚动形态来确定的。
1.「经常使用场景」
与getAdapterPosition()不同,getLayoutPosition()前往的是ViewHolder在可见项列表中的位置,它或许因滚动而出现变动。
2.「前往值」
假设ViewHolder与某个项关联并且在屏幕上可见,前往一个大于或等于0的整数,示意该项在规划中的位置。
假设ViewHolder没有与任何项关联(例如,由于该项曾经从列表中移除或许ViewHolder正在被回收),前往RecyclerView.NO_POSITION,值为-1。
3.「留意事项」
getLayoutPosition()前往的位置是基于屏幕上可见的项和RecyclerView的滚动形态来确定的。假设滚动了RecyclerView,即使项的适配器位置没有变动,它的规划位置也或许会变动。
假设ViewHolder曾经被RecyclerView回收或不再与任何项关联,getLayoutPosition()将前往RecyclerView.NO_POSITION。
在大少数状况下,假设须要处置与项关系的数据或事情,并且不关心这些项在屏幕上的详细位置,经常使用Adapter关系的位置方法会更为适宜。