我正在使用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,如下面的屏幕截图所示:
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);
}
答案 0 :(得分:1)
怎么做呢?
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
仅用于更新适配器数据集...