Recyclerview 使最后添加的项目成为所选项目?
Recyclerview make the last added item be the selected item?
我有一个显示位图的水平 Recyclerview。
它的实现方式是我在它下面有一个 Imageview 和一个 recyclerview。当前选择的项目显示在图像视图上。选定的图像视图被赋予蓝色背景以指示它已被选中。我可以从图库中选择图像,每次选择新图像时,我都想滚动到最后一个位置并选中该项目。
图像列表维护在数组列表中,每次添加新图像时,我都会将图像添加到列表并通知数据更改()。
目前,当我绑定视图时,我会在
中切换蓝色背景的可见性
public void onBindViewHolder(final MyRecyclerViewHolder holder, int position) {
}
但问题是,如果 child 不在屏幕上,则不会调用绑定视图,我也不会滚动到新位置。
我通读了回收站视图的文档,但无法弄清楚如何滚动到那个特定的 child 视图。我没有 SmoothScrollTo 方法,但我的问题是我在哪里触发它?
使用 RecyclerView LayoutManager 在位置滚动项目
recyclerView.getLayoutManager().scrollToPosition(position)
我忘了解决计时部分,理想情况下,这应该在识别到数据集更改的适配器时调用。
在您滚动到该项目之前不会创建您的视图。
你必须打电话给
recyclerView.scrollToPosition(position)
位置是
recyclerView.getAdapter().size()
因此该项目变得可见。
只有一种解决方案:
在您的 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(...)
方法,它将项目添加到项目列表中。添加项目后,刷新列表并滚动到新的 added/latest 项目:
myRecyclerViewAdapter.addItem(...);
myRecyclerViewAdapter.notifyDataSetChanged();
myRecyclerViewAdapter.setSelectedItem(myRecyclerViewAdapter.getItemCount() - 1);
myRecyclerView.scrollToPosition(myRecyclerViewAdapter.getItemCount() - 1);
希望对您有所帮助!
你可以使用
recyclerView.smoothScrollToPosition(View.FOCUS_DOWN);
我有一个显示位图的水平 Recyclerview。 它的实现方式是我在它下面有一个 Imageview 和一个 recyclerview。当前选择的项目显示在图像视图上。选定的图像视图被赋予蓝色背景以指示它已被选中。我可以从图库中选择图像,每次选择新图像时,我都想滚动到最后一个位置并选中该项目。
图像列表维护在数组列表中,每次添加新图像时,我都会将图像添加到列表并通知数据更改()。
目前,当我绑定视图时,我会在
中切换蓝色背景的可见性public void onBindViewHolder(final MyRecyclerViewHolder holder, int position) { }
但问题是,如果 child 不在屏幕上,则不会调用绑定视图,我也不会滚动到新位置。 我通读了回收站视图的文档,但无法弄清楚如何滚动到那个特定的 child 视图。我没有 SmoothScrollTo 方法,但我的问题是我在哪里触发它?
使用 RecyclerView LayoutManager 在位置滚动项目
recyclerView.getLayoutManager().scrollToPosition(position)
我忘了解决计时部分,理想情况下,这应该在识别到数据集更改的适配器时调用。
在您滚动到该项目之前不会创建您的视图。
你必须打电话给
recyclerView.scrollToPosition(position)
位置是
recyclerView.getAdapter().size()
因此该项目变得可见。
只有一种解决方案:
在您的
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(...)
方法,它将项目添加到项目列表中。添加项目后,刷新列表并滚动到新的 added/latest 项目:
myRecyclerViewAdapter.addItem(...);
myRecyclerViewAdapter.notifyDataSetChanged();
myRecyclerViewAdapter.setSelectedItem(myRecyclerViewAdapter.getItemCount() - 1);
myRecyclerView.scrollToPosition(myRecyclerViewAdapter.getItemCount() - 1);
希望对您有所帮助!
你可以使用
recyclerView.smoothScrollToPosition(View.FOCUS_DOWN);