I have created expandable recycle view in my app looks like below
It has parent Items Menu category and Category has child items as shown in image
Following is part of my parent adapter code.
public void onBindViewHolder(@NonNull RecyclerView.ViewHolder viewHolder, int i) {
if (i > HEADER_COUNT - 1) {
FoodMenuItem foodMenuItem = foodMenuItems.get(i - HEADER_COUNT);
MenuViewHolder menuViewHolder = (MenuViewHolder) viewHolder;
//menuViewHolder.rvMenu.setLayoutManager(new LinearLayoutManager(viewHolder.itemView.getContext(), LinearLayoutManager.VERTICAL, false));
if (isVegOnly) {
List<Item> items = new ArrayList<>();
for (Item item : foodMenuItem.getItems()) {
if (item.getType().equalsIgnoreCase(Item.FOOD_TYPE_VEG)) {
items.add(item);
}
}
menuViewHolder.rvMenu.setAdapter(new FoodMenuChildRecycler(items, foodMenuParentListener, i, isAddAllowed));
menuViewHolder.tvNumItems.setText("(" + items.size() + " items)");
} else {
menuViewHolder.rvMenu.setAdapter(new FoodMenuChildRecycler(foodMenuItem.getItems(), foodMenuParentListener, i, isAddAllowed));
menuViewHolder.tvNumItems.setText("(" + foodMenuItem.getItems().size() + " items)");
}
menuViewHolder.ivArrow.setVisibility(menuViewHolder.rvMenu.getAdapter().getItemCount() > 0 ? View.VISIBLE : View.GONE);
menuViewHolder.ivArrow.setImageResource(foodMenuItem.isExpanded() ? R.drawable.chev_up : R.drawable.chev_down);
menuViewHolder.tvTitle.setText(foodMenuItem.getCategoryName());
menuViewHolder.rvMenu.setNestedScrollingEnabled(false);
if (foodMenuItem.isExpanded()) {
menuViewHolder.rvMenu.setVisibility(View.VISIBLE);
} else {
menuViewHolder.rvMenu.setVisibility(View.GONE);
}
}
}
Following is code for child adapter onBindViewHolder
public void onBindViewHolder(@NonNull RecyclerView.ViewHolder viewHolder, int i) {
ChildMenuHolder childMenuHolder = (ChildMenuHolder) viewHolder;
Context context = viewHolder.itemView.getContext();
Item item = itemList.get(i);
childMenuHolder.tvTitle.setText(item.getTitle());
childMenuHolder.txtQty.setText(String.valueOf(item.getQuatity()));
childMenuHolder.txtCartInc.setVisibility(item.isAddedToCart() ? View.VISIBLE : View.GONE);
childMenuHolder.txtQty.setVisibility(item.isAddedToCart() ? View.VISIBLE : View.GONE);
childMenuHolder.txtCartDec.setVisibility(item.isAddedToCart() ? View.VISIBLE : View.GONE);
childMenuHolder.btnAdd.setVisibility(!item.isAddedToCart() ? View.VISIBLE : View.GONE);
childMenuHolder.btnAdd.setBackgroundResource(isAddAllowed ? R.drawable.rounded_bottom_edge_shape_food : R.drawable.rounded_bottom_edge_shape_disable);
childMenuHolder.btnAdd.setTextColor(isAddAllowed ? ContextCompat.getColor(context, R.color.button_green) : ContextCompat.getColor(context, R.color.gray_a1));
childMenuHolder.ivType.setColorFilter(item.getType().equalsIgnoreCase(Item.FOOD_TYPE_VEG) ? ContextCompat.getColor(context, R.color.selected_green) : ContextCompat.getColor(context, R.color.app_red));
}
Following code inside Parent adapter to expand & collapse
public MenuViewHolder(@NonNull View itemView) {
super(itemView);
tvTitle = (TextView) itemView.findViewById(R.id.tvTitle);
tvNumItems = (TextView) itemView.findViewById(R.id.tvNumItems);
ivArrow = (ImageView) itemView.findViewById(R.id.ivArrow);
rvMenu = (RecyclerView) itemView.findViewById(R.id.rvMenu);
rvMenu.setLayoutManager(new LinearLayoutManager(itemView.getContext()));
// rvMenu.setNestedScrollingEnabled(false);
rlArrow = itemView.findViewById(R.id.rlArrow);
rlArrow.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
if (foodMenuParentListener != null) {
foodMenuParentListener.OnExpandClick(getAdapterPosition());
}
}
});
tvTitle.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
if (foodMenuParentListener != null) {
foodMenuParentListener.OnExpandClick(getAdapterPosition());
}
}
});
}
No Since there are too many items in ChildRecycler adapter I facing a big lag issue when there are too many child items. It works properly when number of child items is less
How to fix this?
from Nested Expandable RecyclerView lags on Expand and Collapse with too many number of child items freezes

No comments:
Post a Comment