【问题标题】:Delete RealmObject displayed in a RecyclerView删除 RecyclerView 中显示的 RealmObject
【发布时间】:2015-10-14 12:55:12
【问题描述】:

我想将一些 RealmObjects(ideas) 从 RealmList (ideaList) 显示到 Recyclerview。听起来很容易。但是当我尝试删除一个对象时,它虽然在那里当我做一个查询(从特定用户那里获取所有想法)

代码示例:

查询:

public RealmList<Idea> getIdeaListFromRealm(Context ctx) {
    realm = Realm.getInstance(ctx);
    RealmQuery<Idea> ideaQuery = realm.where(Idea.class);
    RealmResults<Idea> ideaQueryResults = ideaQuery.equalTo("owner.id",""+LoginFragment.loggedOwner.getId()).findAll();
    RealmList<Idea> ideaList = new RealmList<>();
    ideaList.addAll(ideaQueryResults);
    return ideaList;
}

删除(点击) :

holder.delete.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            realm.beginTransaction();
            ideaList.remove(position);
            notifyDataSetChanged();
            realm.commitTransaction();
            fragmentStateHandler.replaceFrag(Frag.ARCHIVEFRAGMENT);
        }
    });

我认为我没有正确删除它。不可能有其他原因,因为删除后它还在查询中。

我做错了什么?提前谢谢

【问题讨论】:

    标签: android android-recyclerview realm


    【解决方案1】:

    您正在删除该对象只是从 RealmList 中删除,它根本没有持久化。

    您必须从结果中删除对象,或者直接遍历对象实例。例如

     realm.beginTransaction();
    
     ideaQueryResults.remove(position);
    
     // alternatively:
    
     Idea idea = ideaQueryResults.get(position);
     idea.removeFromRealm();
    
     realm.commitTransaction();
    
     // from the docs: it will always be more efficient to
     // use the more specific change events if you can.
     // Rely on notifyDataSetChanged() as a last resort.
     notifyItemRemoved(position);
    

    【讨论】:

    • 我认为你应该在通知数据集之前提交。
    猜你喜欢
    • 1970-01-01
    • 2018-12-06
    • 1970-01-01
    • 1970-01-01
    • 2022-01-16
    • 1970-01-01
    • 2020-09-16
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多