【问题标题】:Cant realtime update recycleView whith realm无法使用领域实时更新 recyclerView
【发布时间】:2017-06-13 08:41:07
【问题描述】:

对不起我的英语。我有列表对象,它列表包含开关 btn。当用户更改某些开关时,我需要在数据库中更新它。一世 但是当我尝试更改开关时,我有错误:

java.lang.IllegalStateException: Cannot modify managed objects outside of a write transaction.

我不明白如何创建适配器,谁可以更新实时数据

我的适配器

   public class DocumentTypeAdapterDB extends RealmRecyclerViewAdapter<DocType, DocumentTypeAdapterDB.ViewHolder> {

    RealmList<DocType> docTypes;

    public DocumentTypeAdapterDB(@Nullable RealmList<DocType> docTypes, Context context) {
        super(docTypes, true);
        this.docTypes = docTypes;
    }


    @Override
    public ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
        View layoutView = LayoutInflater.from(parent.getContext()).inflate(R.layout.item_doc_type, null);
        RecyclerView.LayoutParams lp = new RecyclerView.LayoutParams(ViewGroup.LayoutParams.MATCH_PARENT, ViewGroup.LayoutParams.WRAP_CONTENT);
        layoutView.setLayoutParams(lp);
        ViewHolder rcv = new ViewHolder(layoutView);
        return rcv;
    }

    @Override
    public void onBindViewHolder(final ViewHolder holder, final int position) {
        final DocType docType = docTypes.get(position);

        holder.switch_item.setText(docType.name);



        //check box
        holder.switch_item.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                if(!holder.switch_item.isChecked()) {
                    docType.is_check = false;
                } else {
                    docType.is_check = true;
                }
            }
        });

    }


    @Override
    public int getItemCount() {
        return docTypes.size();
    }

    public class ViewHolder extends RecyclerView.ViewHolder {

        SwitchCompat switch_item;

        public ViewHolder(View itemView) {
            super(itemView);
            switch_item = (SwitchCompat) itemView.findViewById(R.id.switch_item);
        }

        public void clearAnimation()
        { itemView.clearAnimation(); }
    }


}

文档类型

public class DocType extends RealmObject{
public boolean is_check;
    public String name;
    //getter and setter

}

【问题讨论】:

  • 您是否尝试过先刷新recyclerview,以便布局会刷新invalidate() 的代码。并且建议现在市场上有很多实时数据库,例如 Firebase,您必须检查一下。

标签: android android-recyclerview realm


【解决方案1】:

你需要事务来修改RealmObjects。

所以,你应该得到docTypes所属的Realm实例,然后:

realm.executeTransaction(new Realm.Transaction() {
    @Override
    public void execute(Realm realm) {
        docType.is_check = holder.switch_item.isChecked();
    }
});

【讨论】:

  • 哇!非常感谢警惕!你让我开心)
  • 非常感谢。你救了我
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多