【问题标题】:create RealmRecyclerView for Realm Relational Object为领域关系对象创建 RealmRecyclerView
【发布时间】:2017-04-27 09:21:36
【问题描述】:

我有 2 个对象,并且有这样的关系:

public class Acitivities extends RealmObject{
  @PrimaryKey 
  int id;
  String nameActivity;
  RealmList<Task> Task;
}

public class Task extends RealmObject{
  @PrimaryKey
  int id;
  String nameTask;
  String Description;
}

这是我的 RecyclerView 适配器:

public class CustomRealmAdapter extends RealmRecyclerViewAdapter<Task, 
  CustomRealmAdapter.MyViewHolder>{
  OrderedRealmCollection<Task> data;
  RealmResult<Task> task;
  RealmResult<Activities> activities;

public CustomRealmAdapter(OrderedRealmCollection<Task> data, 
    RealmResult<Task> task){
    super(data,true);
    this.data = data;
    this.task = task;
}

}

在 OnBindViewHolder,我想获取 Task,名称为 Activities,在 holder 中我有 3 个 textview。

@Override
    public void onBindViewHolder(final MyViewHolder holder, final int position) {
    final Task tsk = task.ge(position);
    holder.nameActivity.setText(activities.getNameActivity);
    holder.nameTask.setText(tsk.getNameTask);
    holder.Description.setText(tsk.getDescription);
}

但我总是出错,我错了吗?为任务创建 RecyclerView,因为 RealmList 在活动中? 我想在我的任务活动中显示这个 RecyclerView,而不是在活动活动中。 帮帮我:(

【问题讨论】:

  • i always get error, am i wrong? 定义“错误”
  • 顺便说一句,我不明白你到底想显示什么。
  • 我有一个Task Activity,它是我保存在Task Object 中的,并且Task 对象与Activity 有关系,我想为task 做一个recycler 视图,也可以查看有的activity 的名称与该任务的关系。
  • 错误是未显示活动名称。
  • @EpicPandaForce 怎么样?

标签: java android android-recyclerview realm


【解决方案1】:

要显示链接到给定TaskActivity,您需要一个双向链接(因此 Link 也会有Activity activity;),或者您可以定义链接对象到@987654324 @ 作为Task 的字段(Realm 3.1+)。

public class Acitivities extends RealmObject{
  @PrimaryKey 
  int id;
  String nameActivity;
  RealmList<Task> Task;
}

public class Task extends RealmObject{
  @PrimaryKey
  int id;
  String nameTask;
  String Description;
  @LinkingObjects("Task")
  final RealmResults<Acitivities> activity = null;
}

然后

public class CustomRealmAdapter extends RealmRecyclerViewAdapter<Task, 
      CustomRealmAdapter.MyViewHolder>{

    public CustomRealmAdapter(OrderedRealmCollection<Task> data){
        super(data,true);
    }
    @Override
    public void onBindViewHolder(final MyViewHolder holder, final int position) {
        final Task tsk = getData().get(position);
        holder.nameActivity.setText(tsk.activity.get(0).getNameActivity());
        holder.nameTask.setText(tsk.getNameTask());
        holder.Description.setText(tsk.getDescription());
    }
}

【讨论】: