我有一个RecyclerView(父级)在Fragment中填充了一些RecyclerViews(子级),我想通过某个操作(例如点击操作)直接从Fragment更新每个嵌套的RecyclerView(子级),如何以完美和高效的方式实现此目标?
初始的ParentAdapter
ParentAdapter adapter = new ParentAdapter(dataSet);
mBinding.recyclerView.setAdapter(adapter);
ParentAdapter.java
public class MainAdapter extends RecyclerView.Adapter<MainAdapter.ViewHolder> {
private final RecyclerView.RecycledViewPool viewPool;
private List<CartItemCategory> dataSet;
public MainAdapter(List<CartItemCategory> dataSet) {
this.dataSet = dataSet;
}
@NonNull
@Override
public ViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) {
ShoppingCardParentItemLayoutBinding mBinding = ShoppingCardParentItemLayoutBinding.inflate(LayoutInflater.from(parent.getContext()), parent, false);
return new ViewHolder(mBinding);
}
@Override
public void onBindViewHolder(@NonNull ViewHolder holder, int position) {
holder.mBinding.setCartItemCategory(dataSet.get(position));
ChildAdapter childAdapter = new ChildAdapter(dataSet.get(position).getCartItems());
holder.mBinding.recyclerView.setHasFixedSize(true);
holder.mBinding.recyclerView.setAdapter(childAdapter);
holder.mBinding.recyclerView.setRecycledViewPool(viewPool);
}
@Override
public int getItemCount() {
return dataSet.size();
}
class ViewHolder extends RecyclerView.ViewHolder {
ShoppingCardParentItemLayoutBinding mBinding;
ViewHolder(@NonNull ShoppingCardParentItemLayoutBinding mBinding) {
super(mBinding.getRoot());
this.mBinding = mBinding;
}
}
}
ChildAdapter.java
public class ChildAdapter extends RecyclerView.Adapter<InnerAdapter.ViewHolder> {
private List<CartItem> cartItems;
public ChildAdapter(List<CartItem> cartItems) {
this.cartItems = cartItems;
}
@NonNull
@Override
public ViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) {
ShoppingCardItemLayoutBinding mBinding = ShoppingCardItemLayoutBinding.inflate(LayoutInflater.from(parent.getContext()), parent, false);
return new ViewHolder(mBinding);
}
@Override
public void onBindViewHolder(@NonNull ViewHolder holder, int position) {
holder.mBinding.setCartItem(cartItems.get(position));
}
@Override
public int getItemCount() {
return cartItems.size();
}
class ViewHolder extends RecyclerView.ViewHolder {
ShoppingCardItemLayoutBinding mBinding;
ViewHolder(@NonNull ShoppingCardItemLayoutBinding mBinding) {
super(mBinding.getRoot());
this.mBinding = mBinding;
}
}
}
父RecyclerView
<androidx.recyclerview.widget.RecyclerView
android:id="@+id/recycler_view"
android:layout_width="match_parent"
android:layout_height="match_parent"
app:layoutManager="androidx.recyclerview.widget.LinearLayoutManager"
>
子项布局
<?xml version="1.0" encoding="utf-8"?>
<layout xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:android="http://schemas.android.com/apk/res/android"
>
<androidx.constraintlayout.widget.ConstraintLayout
android:layout_width="match_parent"
android:layout_height="wrap_content">
<androidx.recyclerview.widget.RecyclerView
android:id="@+id/recycler_view"
android:layout_width="match_parent"
android:layout_height="wrap_content"
app:layoutManager="androidx.recyclerview.widget.LinearLayoutManager"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent" />
</androidx.constraintlayout.widget.ConstraintLayout>
</layout>