如何在不跳过布局的情况下为内部RecyclerView项设置适配器? [英] How to set the adapter for an inner RecyclerView item without skipping the layout?

查看:152
本文介绍了如何在不跳过布局的情况下为内部RecyclerView项设置适配器?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我正在使用RecyclerView来显示一些数据.对于RecyclerView中的每个项目,我创建了一个自定义布局,该布局在其他视图旁边具有RecyclerView.所以我在每个项目下都有一个嵌套的RecyclerView.

I'm using a RecyclerView to display some data. For each item in my RecyclerView I have created a custom layout which holds beside other views a RecyclerView. So I have a nested RecyclerView under each item.

<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,如下面的屏幕截图所示:

The layout for the inner RecyclerView is very simple, an ImageView for each item, like in the screenshot below:

这是我的外部ReyclerView的适配器类:

This is my adapter class for the outer 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);
    }
}

如您所见,我正在为项目中存在的每个RecyclerView创建一个新的UserAdapter对象,以便每个内部RecyclerView都有自己的适配器.不幸的是我得到了

As you can see, I'm creating a new UserAdapter object for each RecyclerView that exist within my item so each inner RecyclerView to have its own adapter. Unfortunately I get:

未连接适配器;跳过布局

No adapter attached; skipping layout

如何为内部RecyclerView设置适配器,所以我再也无法收到此错误?可以在我的外部适配器类之外设置吗?谢谢!

How to set the adapter for the inner RecyclerView, so I cannot get this error anymore? Can it be set outside my outer adapter class? Thanks!

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

推荐答案

怎么做呢?

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仅用于更新适配器数据集...

So, void bind is used only to update the adapter dataset...

这篇关于如何在不跳过布局的情况下为内部RecyclerView项设置适配器?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆