在Recycler View的情况下,什么是等价的listview.setSelection

在ListView的情况下,如果我们想要select一个特定的项目,我们使用“setSelection”方法。 我们如何做到这一点的情况下回收查看

Solutions Collecting From Web of "在Recycler View的情况下,什么是等价的listview.setSelection"

使用RecyclerView LayoutManager在位置上滚动项目

recyclerView.getLayoutManager().scrollToPosition(position)

检查

 scrollToPositionWithOffset(int position, int offset) scrollToPositionWithOffset(5,0); 

从LinearLayoutManager滚动到具有给定偏移量的指定适配器位置。

如果您想在顶部select,则将偏移量传递为0

这对我有效

检查

 recyclerView.scrollToPosition(cursor.getcount() - 1); 

ListView.setSelected()做(至less)两件事情:

  1. 它将列表中的项目设置为被选中(同时从另一个项目中删除select – 如果存在)
  2. 它滚动列表,以便该项目在屏幕上可见。

实现2.或者调用RecyclerView的scrollToPosition()方法(如失败者所示),或者根据您所需的滚动行为调用LayoutManager对象的滚动方法之一。

例如recyclerView.getLayoutManager()。smoothScrollToPosition()

您可能需要滚动最小值,以便所选项目显示在屏幕上。 如果是这样,并且您正在使用LinearLayoutManager或GridLayoutManager,则可以基于这些类中定义的findFirstCompletelyVisibleItemPosition()和findLastCompletelyVisibleItemPosition()来构build此类滚动逻辑。

实现1.更棘手。 您可能需要使用以下配方:

首先在colors.xml, item_state_selected_color中定义背景颜色,以便在select某个项目时使用。 在onCreateViewHolder()实现中,创build一个StateListDrawalbe并将其设置为视图的背景。 说这样的话:

 public ItemViewHolder onCreateViewHolder(ViewGroup viewGroup, int i) { // inflate the item view View itemView = LayoutInflater.from(viewGroup.getContext()). inflate(itemResourceId,viewGroup, false); // create color drawable by a resorce id ColorDrawable colorDrawableSelected = new ColorDrawable(resources.getColor(R.color.item_state_selected_color)); // create StateListDrawable object and define its states StateListDrawable stateListDrawable = new StateListDrawable(); stateListDrawable.addState(new int[]{android.R.attr.state_selected}, colorDrawableSelected); stateListDrawable.addState(StateSet.WILD_CARD, null); // set the StateListDrawable as background of the item view if (android.os.Build.VERSION.SDK_INT < android.os.Build.VERSION_CODES.JELLY_BEAN) { itemView.setBackgroundDrawable(stateListDrawable); } else { itemView.itemView.setBackground(stateListDrawable); } // create view holder object providing it with the item view return new YourViewHolder(itemView); } 

在YourAdapter对象(或其他地方)保存一个variables,mCurrentSelectedPosition(可能初始化为-1),保存当前选定的位置。 仍然在适配器中,根据您的点击逻辑,定义处理程序以查看回收站视图项目的点击。 例如:

 void onItemClick(int position) { YourViewHolder yourViewHolder; int oldSelectedPosition = mCurrentSelectedPosition; if (position != mCurrentSelectedPosition) { mCurrentSelectedPosition = position; if (oldSelectedPosition != -1) { yourViewHolder = findViewHolderForPosition(oldSelectedPosition); yourViewHolder.itemView.setSelected(false); } yourViewHolder = findViewHolderForPosition(mCurrentSelectedPosition); yourViewHolder.itemView.setSelected(true); } } 

接下来,在YourViewHolder的构造函数中设置监听器来点击该项目:

 public YourViewHolder(View itemView,YourAdapter adapter) { mAdapter = adapter; // ... other code here ... itemView.setOnClickListener(this); } 

仍然在YourViewHolder中,重写onClick()方法将处理委托给适配器。 喜欢这个

 @Override public void onClick(View v) { mAdapter.onItemClick(getPosition()); } 

现在只有最后一个问题需要解决 – 我们需要跟踪所选项目的回收。

 @Override public void onBindViewHolder(YourViewHolder yourViewHolder, int position) { if (position == mCurrentSelectedPosition) { yourViewHolder.itemView.setSelected(true); } else { yourViewHolder.itemView.setSelected(false); } // ... other code here ... } 

祝你好运!