如何在不跳过布局的情况下为内部RecyclerView项设置适配器? [英] How to set the adapter for an inner RecyclerView item without skipping the layout?
问题描述
我正在使用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屋!