我有一个水平的Recyclerview,显示位图。 它的实施方式是我在它下面有一个Imageview和一个Recyclerview。当前选择的项目显示在图像视图中。所选图像视图的背景为蓝色,表示已选中。我可以从图库中选择图像,每次选择新图像时,我想滚动到最后一个位置并选择项目。
图像列表保存在数组列表中,每次添加新图像时,我都会将图像添加到列表中并通知notifyDataChanged()。
目前,当我绑定视图时,我切换了
中蓝色背景的可见性public void onBindViewHolder(final MyRecyclerViewHolder holder,int position){ }
但问题是,如果孩子不在屏幕上,则不会调用绑定视图,我也不会滚动到新位置。 我阅读了Recycler视图的文档,但无法弄清楚如何滚动到特定的子视图。我没有SmoothScrollTo方法,但我的问题是我在哪里触发它?
答案 0 :(得分:17)
有一个解决方案:
在RecyclerView
适配器中,添加变量selectedItem
和方法setSelectedItem()
:
private static int selectedItem = -1;
... ...
public void setSelectedItem(int position)
{
selectedItem = position;
}
在onBindViewHolder(...)
中,添加:
@Override
public void onBindViewHolder(ViewHolder holder, final int position)
{
... ...
if(selectedItem == position)
holder.itemView.setSelected(true);
}
现在您可以滚动到特定项目,并通过以下方式以编程方式设置它:
myRecyclerViewAdapter.setSelectedItem(position_scrollTo);
myRecyclerView.scrollToPosition(position_scrollTo);
例如,您想要滚动到上一个位置并将其选中,只需:
int last_pos = myRecyclerViewAdapter.getItemCount() - 1;
myRecyclerViewAdapter.setSelectedItem(last_pos);
myRecyclerView.scrollToPosition(last_pos);
[<强>更新强>
要添加项目并将其选中,您应该在适配器中使用addItem(...)
方法,这会将项目添加到项目列表中。添加项目后,刷新列表并滚动到新添加/最新项目:
myRecyclerViewAdapter.addItem(...);
myRecyclerViewAdapter.notifyDataSetChanged();
myRecyclerViewAdapter.setSelectedItem(myRecyclerViewAdapter.getItemCount() - 1);
myRecyclerView.scrollToPosition(myRecyclerViewAdapter.getItemCount() - 1);
希望这有帮助!
答案 1 :(得分:1)
在滚动到该项目之前,不会创建您的视图。
你必须致电
recyclerView.scrollToPosition(position)
位置
recyclerView.getAdapter().size()
因此该项目变得可见。
答案 2 :(得分:0)
使用RecyclerView LayoutManager滚动位置
的项目recyclerView.getLayoutManager().scrollToPosition(position)
我忘了解决计时部分,理想情况下应该在确定数据集更改的适配器时调用它。
答案 3 :(得分:0)
您可以使用
recyclerView.smoothScrollToPosition(View.FOCUS_DOWN);