Recyclerview使最后添加的项目成为所选项目?

Los*_*ppy 5 android scroll recycler-adapter android-recyclerview

我有一个水平的Recyclerview,显示位图.它的实施方式是我在它下面有一个Imageview和一个Recyclerview.当前选择的项目显示在图像视图中.所选图像视图的背景为蓝色,表示已选中.我可以从图库中选择图像,每次选择新图像时,我想滚动到最后一个位置并选择项目.

图像列表保存在数组列表中,每次添加新图像时,我都会将图像添加到列表中并通知notifyDataChanged().

目前,当我绑定视图时,我切换了蓝色背景的可见性

public void onBindViewHolder(final MyRecyclerViewHolder holder,int position){}

但问题是,如果孩子不在屏幕上,则不会调用绑定视图,我也不会滚动到新位置.我阅读了Recycler视图的文档,但无法弄清楚如何滚动到特定的子视图.我没有SmoothScrollTo方法,但我的问题是我在哪里触发它?

Xci*_*egn 17

有一个解决方案:

  1. RecyclerView适配器中,添加变量selectedItem和方法setSelectedItem():

    private static int selectedItem = -1;
    
     ... ...
    
    public void setSelectedItem(int position)
    {
       selectedItem = position;
    }
    
    Run Code Online (Sandbox Code Playgroud)
  2. 在你的onBindViewHolder(...),添加:

    @Override
    public void onBindViewHolder(ViewHolder holder, final int position) 
    {
       ... ...
    
       if(selectedItem == position)
          holder.itemView.setSelected(true);
    }   
    
    Run Code Online (Sandbox Code Playgroud)
  3. 现在,您可以滚动到特定项目并通过以下方式以编程方式选择它:

    myRecyclerViewAdapter.setSelectedItem(position_scrollTo);
    myRecyclerView.scrollToPosition(position_scrollTo);
    
    Run Code Online (Sandbox Code Playgroud)

例如,您想要滚动到上一个位置并将其选中,只需:

    int last_pos = myRecyclerViewAdapter.getItemCount() - 1;
    myRecyclerViewAdapter.setSelectedItem(last_pos);
    myRecyclerView.scrollToPosition(last_pos);
Run Code Online (Sandbox Code Playgroud)


[ 更新 ]

要添加项目并将其选中,您应该addItem(...)在适配器中有一个方法,它将项目添加到项目列表中.添加项目后,刷新列表并滚动到新添加/最新项目:

myRecyclerViewAdapter.addItem(...);
myRecyclerViewAdapter.notifyDataSetChanged();
myRecyclerViewAdapter.setSelectedItem(myRecyclerViewAdapter.getItemCount() - 1); 
myRecyclerView.scrollToPosition(myRecyclerViewAdapter.getItemCount() - 1);
Run Code Online (Sandbox Code Playgroud)

希望这有帮助!