Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

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>
like image 735
AMAN SINGH Avatar asked Aug 02 '16 08:08

AMAN SINGH


1 Answers

Well first of all why do you even need one recycler view in the other? It is usually solved through expandable recycler view. Here is a nice tutorial.

Second, I see this line cartAdapter.notifyItemRemoved(id); where is notification for the second recycler? Have you got a link on it? You should call notifyDataSetChanged() for it!

And OH MY GOD THERE ARE SO MUCH ANONYMOUS CLASSES! I cannot even understand what is happening in your code! It is just incomprehensible. Get rid of that stuff, seriously.

like image 149
RexSplode Avatar answered Oct 20 '22 00:10

RexSplode