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

标签 android scroll android-recyclerview

我有一个显示位图的水平 Recyclerview。 它的实现方式是我在它下面有一个 Imageview 和一个 recyclerview。当前选择的项目显示在 ImageView 上。选定的 ImageView 被赋予蓝色背景以指示它已被选中。我可以从图库中选择图像,每次选择新图像时,我都想滚动到最后一个位置并选中该项目。

图像列表在数组列表中维护,每次添加新图像时,我都会将图像添加到列表并通知数据更改()。

当前,当我绑定(bind) View 时,我会切换蓝色背景的可见性

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

但问题是,如果 child 不在屏幕上,则不会调用绑定(bind) View ,我也不会滚动到新位置。 我通读了回收站 View 的文档,但无法弄清楚如何滚动到那个特定的 subview 。我没有 SmoothScrollTo 方法,但我的问题是我在哪里触发它?

最佳答案

有一种解决方案:

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

    private static int selectedItem = -1;
    
     ... ...
    
    public void setSelectedItem(int position)
    {
       selectedItem = position;
    }
    
  2. 在您的onBindViewHolder(...) 中,添加:

    @Override
    public void onBindViewHolder(ViewHolder holder, final int position) 
    {
       ... ...
    
       if(selectedItem == position)
          holder.itemView.setSelected(true);
    }   
    
  3. 现在您可以滚动到特定项目并通过以下方式以编程方式将其设置为选中:

    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);

希望对您有所帮助!

关于android - Recyclerview 使最后添加的项目成为所选项目?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29176979/

相关文章:

android - ScrollView 内的 PercentRelativeLayout 23.2.1 不正确的零高度

android - Recycler View (水平)有两个项目占父宽度的 50%

android - 如何将 .jar 文件添加到 Android studio(版本 0.4.0)项目中

java - Branch.io (Android SDK) 和 GDPR

java - 在云中每隔几分钟运行一次 Java 应用程序的最佳方式?

android - 如何以编程方式滚动 Android WebView

android - 如何点击 recyclerview?

android - 带和不带 SD 卡的设备的/下载文件夹位置

ios - Xcode 4,基于 View 的应用程序 + UITableView 向上滚动时崩溃

android - 停止ListView滚动动画