Как установить адаптер для внутреннего элемента RecyclerView, не пропуская макет? - PullRequest
1 голос
/ 04 апреля 2019

Я использую RecyclerView для отображения некоторых данных.Для каждого элемента в моем RecyclerView я создал собственный макет, который наряду с другими представлениями содержит RecyclerView.Итак, у меня есть вложенный RecyclerView под каждым элементом.

<RelativeLayout
    android:layout_width="match_parent"
    android:layout_height="match_parent">

    <android.support.v7.widget.RecyclerView
        android:layout_width="180dp"
        android:layout_height="45dp"
        android:id="@+id/recycler_view"/>

    //Other text views
</RelativeLayout>

Макет внутреннего RecyclerView очень прост, ImageView для каждого элемента, как на скриншоте ниже:

enter image description here Это мой класс адаптера для внешнего ReyclerView:

class UserViewHolder extends RecyclerView.ViewHolder {
    View itemView;
    RecyclerView recyclerView;

    UserViewHolder(View itemView) {
        super(itemView);
        this.itemView = itemView;
        recyclerView = itemView.findViewById(R.id.recycler_view);
    }

    void bind(User user) {
        itemView.setOnClickListener(view -> {
            //Move to user Activity
        });

        UserAdapter adapter = new UserAdapter(user.list);
        recyclerView.setAdapter(adapter);
    }
}

Как видите, я создаю новый объект UserAdapter для каждого RecyclerView, который существует в моем элементепоэтому каждый внутренний RecyclerView должен иметь свой собственный адаптер.К сожалению, я получаю:

Адаптер не подключен;пропуск макета

Как настроить адаптер для внутреннего RecyclerView, чтобы я больше не мог получить эту ошибку?Это может быть установлено вне моего внешнего класса адаптера?Спасибо!

Редактировать:

@Override
protected void onBindViewHolder(@NonNull UserViewHolder userViewHolder, int position, @NonNull User user) {
    userViewHolder.bind(user);
}

1 Ответ

1 голос
/ 04 апреля 2019

А как это сделать:

class UserViewHolder extends RecyclerView.ViewHolder {

   View itemView;
   RecyclerView recyclerView;
   UserAdapter adapter;

   UserViewHolder(View itemView) {
       super(itemView);
       this.itemView = itemView;
       recyclerView = itemView.findViewById(R.id.recycler_view);
       adapter = new UserAdapter(user.list);

       itemView.setOnClickListener(view -> {
        //Move to user Activity
       });
       recyclerView.setAdapter(adapter);

   }

   void bind(User user) {

       adapter.setUser(user);            // update you adapter dataset here
       adatper.notifyDataSetChanged();

   }
}

Итак, void bind используется только для обновления набора данных адаптера ...

...