【问题标题】:Drag and drop RealmResults拖放 RealmResults
【发布时间】:2026-02-17 09:20:03
【问题描述】:

对不起我的英语。我有recyleView,在适配器中我有RealmResults。我尝试做下拉列表,但是当我将列表替换为RealmResults 时出现错误:

java.lang.UnsupportedOperationException: This method is not supported by 'RealmResults' or 'OrderedRealmCollectionSnapshot'.

这是我的代码:

ItemTouchHelper.Callback _ithCallback = new ItemTouchHelper.Callback() {
            @Override
            public boolean onMove(RecyclerView recyclerView, RecyclerView.ViewHolder viewHolder, RecyclerView.ViewHolder target) {
                try {
                    Collections.swap(categoryPresenter.getCategory(), viewHolder.getAdapterPosition(), target.getAdapterPosition());
                    categoryAdapter.notifyItemMoved(viewHolder.getAdapterPosition(), target.getAdapterPosition());
                }catch (Exception e) {
                    Log.e("error", e.toString());
                }

                return true;
            }

            @Override
            public void onSwiped(RecyclerView.ViewHolder viewHolder, int direction) {}

            @Override
            public int getMovementFlags(RecyclerView recyclerView, RecyclerView.ViewHolder viewHolder) {
                hideOpenedItems(recyclerView);
                return makeFlag(ItemTouchHelper.ACTION_STATE_DRAG,
                        ItemTouchHelper.DOWN | ItemTouchHelper.UP | ItemTouchHelper.START | ItemTouchHelper.END);
            }
        };

【问题讨论】:

    标签: android realm android-recyclerview


    【解决方案1】:

    RealmResult 不是列表,因此您不能交换 RealmResult 中的项目。

    你能做的是

    List<MyItem> list = realm.copyFromRealm(realmResults);
    

    但是,这会使列表不受管理,这意味着如果您更新数据库中的数据,对象将不会自动更新。

    【讨论】: