¿Cómo recycleview adaptador en otro adaptador recycleview?

Tengo un RecyclerView . Tiene un diseño personalizado y dentro de la disposición personalizada es otro RecyclerView . Cuando notifico a la vista del reciclador que se ha eliminado un elemento, mi vista principal de reciclador se actualiza, pero mi vista de reciclado de vista personalizada no se notifica.

  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); 

Este es el código para que RecyclerView elimine. En mi carrito Adaptador he tomado otra vista de reciclaje adaptada. Cualquier idea de cómo notificar adaptado Si se eliminan los datos de la vista de reciclaje. ???

Mi clase onBindViewHolder

  @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" /> 

Niño 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> 

Bueno, en primer lugar ¿por qué necesita una vista de reciclador en el otro? Por lo general se resuelve a través de la vista de reciclador expandible. Aquí hay un buen tutorial.

En segundo lugar, veo esta línea cartAdapter.notifyItemRemoved(id); ¿Dónde está la notificación para el segundo reciclador? ¿Tienes un enlace? Debe llamar a notifyDataSetChanged() para ello!

¡Y MIS DIOS HAY TANTO CLASES ANÓNIMAS! ¡Ni siquiera puedo entender lo que está sucediendo en tu código! Es simplemente incomprensible. Deshazte de esas cosas, en serio.

Intente esto:

  @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); holder.addon_recycleview.setHasFixedSize(true); holder.addon_recycleview.setLayoutManager(new LinearLayoutManager(context, LinearLayoutManager.VERTICAL, false)); //Create a setter method in AddonRecycleviewAdapter adapter holder.addon_recycleview.setLists(listsubdata.get(position), listsubprice.get(position), listsubAddon.get(position)); holder.addon_recycleview.setAdapter(recycleViewAdapter); } catch (Exception e) { e.printStackTrace(); } } 

Y en su setter haga esto:

 //set list of items from ParentAdapter in your AddonRecycleviewAdapter adapter public void setLists(List<T> l1,List<T> l2,List<T> l3) { //Set You list as field variable here this.l1 = l1; this.l2 = l2; this.l3 = l3; this.notifyDataSetChanged(); } 

Finalmente recibí mi respuesta hoy, de otra manera simplemente llamo adaptador en 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); } 
FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.