AMAN SINGH AMAN SINGH - 2 months ago 25
Android Question

How to recycleview adapter under another recycleview adapter?

I have a

RecyclerView
. It has a custom layout and inside the custom layout is another
RecyclerView
. When I notify the recycler view that an item has been deleted, my main recycler view is updated but my custom view recycle view is not getting notified.

SwipeDismissRecyclerViewTouchListener listener = new SwipeDismissRecyclerViewTouchListener.Builder(
recyclerView,
new SwipeDismissRecyclerViewTouchListener.DismissCallbacks() {
@Override
public boolean canDismiss(int position) {

return true;
}

@Override
public void onDismiss(View view) {
// Do what you want when dismiss
int id = recyclerView.getChildAdapterPosition(view);
databaseHelper.deleteSingleItem(cartAdapter.cartItemName.get(id));

Log.e(TAG, "onDismiss: " + subdata.get(id) + " " + data.get(id));
subdataprice.remove(id);
subdata.remove(id);
addonlist.remove(id);
price.remove(id);
data.remove(id);
cartAdapter.notifyItemRemoved(id);

Log.e(TAG, data.size() + " onDismiss: size " + subdata.size());
totalPriceTextView.setText(String.valueOf(getTotal()));
cartAdapter.updateRecycler();
}
})
.setIsVertical(false)
.setItemClickCallback(new SwipeDismissRecyclerViewTouchListener.OnItemClickCallBack() {
@Override
public void onClick(int i) {
// Toast.makeText(getBaseContext(), String.format("Delete item"), Toast.LENGTH_LONG).show();

}
})
.create();
recyclerView.setOnTouchListener(listener);


This is the code for
RecyclerView
swipe to remove. In my cart Adapter I've take another recycle view adapted. Any Idea how to notify adapted If any data is removed from recycle view.???

My onBindViewHolder Class

@Override
public void onBindViewHolder(CustomViewHolder holder, int position) {

try {
holder.itemName.setText(String.format("%s", cartItemName.get(position)));
holder.itemPrice.setText(String.format("£ %s", cartItemPrice.get(position)));

AddonRecycleviewAdapter recycleViewAdapter = new AddonRecycleviewAdapter(context, listsubdata.get(position), listsubprice.get(position), listsubAddon.get(position));
holder.addon_recycleview.setHasFixedSize(true);
holder.addon_recycleview.setLayoutManager(new LinearLayoutManager(context, LinearLayoutManager.VERTICAL, false));
holder.addon_recycleview.setAdapter(recycleViewAdapter);


} catch (Exception e) {
e.printStackTrace();
}
}


Parent Recycleview

<android.support.v7.widget.RecyclerView
android:id="@+id/cartRecyclerView"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginBottom="2dp"
android:clipToPadding="false"
android:padding="@dimen/item_gallery_padding"
app:layout_behavior="@string/appbar_scrolling_view_behavior" />


Child recycleview

<?xml version="1.0" encoding="utf-8"?>

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="horizontal">


<ImageButton
android:visibility="invisible"
android:id="@+id/btnremove"
android:layout_width="wrap_content"
android:layout_height="match_parent"
android:layout_margin="@dimen/standard_padding_small"
android:background="@null"
android:src="@drawable/ic_action_action_search"
android:text="Remove" />


<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_margin="@dimen/standard_padding_small"
android:gravity="center_vertical"
android:padding="8dp"
android:text="+" />


<TextView
android:id="@+id/addonNameTextView"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_margin="@dimen/standard_padding_small"
android:layout_weight="1"
android:ellipsize="end"
android:gravity="center_vertical"
android:maxLines="1"
android:padding="8dp"
android:text="9 inch Pizza"
android:textAppearance="?android:attr/textAppearanceSmall"
android:textColor="@color/secondary_text" />

<TextView
android:id="@+id/addOnPriceTextView"
android:layout_width="wrap_content"
android:layout_height="match_parent"
android:layout_margin="@dimen/standard_padding_small"
android:gravity="center_vertical"
android:maxLines="1"
android:text="£3.15"
android:padding="8dp"
android:textAppearance="?android:attr/textAppearanceSmall"
android:textColor="@color/primary_text" />
</LinearLayout>

Answer

finally I got my answer today , from another way simply i call adapter in synchronized

synchronized(recyclerview){
     recycleViewAdapter = new AddonRecycleviewAdapter(context, listsubdata.get(position), listsubprice.get(position), listsubAddon.get(position));
    holder.addon_recycleview.setHasFixedSize(true);
    holder.addon_recycleview.setLayoutManager(new LinearLayoutManager(context, LinearLayoutManager.VERTICAL, false));
    holder.addon_recycleview.setAdapter(recycleViewAdapter);
}