简体   繁体   中英

create RealmRecyclerView for Realm Relational Object

i have 2 object, and the have relation like this :

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;
}

And this is my RecyclerView Adapter :

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;
}

}

at OnBindViewHolder i want to get Task, with the name of Activities, which is in holder i have 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);
}

but i always get error, am i wrong? create RecyclerView for Task, because the RealmList is in Activities? i want to show this RecyclerView in my Task Activity, not in Activities Activity. Help me :(

To display the Activity that is linked to a given Task , you either need a bidirectional link (so Link would have Activity activity; as well), or you can define the linking objects to Task as a field of 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;
}

Then

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());
    }
}

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM