【问题标题】:After reordering the items in Android recycler view the position is not updating在 Android 回收站视图中重新排序项目后,位置未更新
【发布时间】:2021-12-30 18:39:02
【问题描述】:

在我的应用程序中,我在回收站视图中显示按钮列表,在 ItemTouchHelper.SimpleCallback 的帮助下,onMove 函数我能够重新排序按钮,但重新排序后位置没有更新。例如:-(如果我将 button1 从 0 位置拖到 1 位置,那么 button1 应该显示它的新位置是 1,但它显示的是旧位置,即 0)是否有任何变化,以便 我可以访问它并了解我的按钮的新位置。 任何帮助将不胜感激。

ItemTouchHelper.SimpleCallback simpleCallback = new ItemTouchHelper.SimpleCallback(ItemTouchHelper.UP
                | ItemTouchHelper.DOWN | ItemTouchHelper.START | ItemTouchHelper.END , 0) {
            @Override
            public boolean onMove(@NonNull RecyclerView recyclerView, @NonNull RecyclerView.ViewHolder viewHolder, @NonNull RecyclerView.ViewHolder target) {
    
                int fromPosition = viewHolder.getAdapterPosition();
                int toPosition = target.getAdapterPosition();
    
                Collections.swap(datalist,fromPosition,toPosition);
    
                recyclerView.getAdapter().notifyItemMoved(fromPosition,toPosition);
                return false;
            }
    
    
            @Override
            public void onSwiped(@NonNull RecyclerView.ViewHolder viewHolder, int direction) {
    
            }
        };

【问题讨论】:

    标签: java android xml android-studio android-recyclerview


    【解决方案1】:

    这应该根据视图的新位置更新视图。这是项目更改事件,而不是结构更改事件。它表明位置数据的任何反映都是过时的,应该更新。

      recyclerView.getAdapter().notifyDataSetChanged();
    

    【讨论】:

    • 我认为你有这个倒退。这是一个结构性变化事件。请参阅notifiyDataSetChanged 上的文档:“结构变化是指在数据集中插入、删除或移动项目。”该文档还建议在适用时使用notifyItemRangeChanged。这样可以避免重新绑定所有内容。
    【解决方案2】:

    我通过通知适配器中的整个数据集解决了这个问题:

    Collections.swap(datalist,fromPosition,toPosition);
    recyclerView.getAdapter().notifyItemMoved(fromPosition,toPosition);
    recyclerView.getAdapter().notifyDataSetChanged()
    return false;
    

    【讨论】:

      猜你喜欢
      • 2021-12-21
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多