8

Ich habe eine RecyclerView. Es hat ein benutzerdefiniertes Layout und innerhalb des benutzerdefinierten Layouts ist ein weiterer RecyclerView. Wenn ich die Recycler-Ansicht benachrichtige, dass ein Element gelöscht wurde, wird meine Haupt-Recycler-Ansicht aktualisiert, aber meine RecView-Ansicht für die benutzerdefinierte Ansicht wird nicht benachrichtigt.Wie recycleview Adapter unter einem anderen recycleview Adapter?

Dies ist der Code für RecyclerView wischen, um zu entfernen. In meinem Warenkorb Adapter habe ich eine andere Recyclingansicht angepasst. Irgendeine Idee, wie man sich benachrichtigt, wenn irgendwelche Daten von der Wiederverwertungsansicht entfernt werden ???

Meine onBindViewHolder Klasse

@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(); 
    } 
} 

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

Kinder 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> 
+1

können Sie nach http://android-pratap.blogspot.in/2015/12/horizontal-recyclerview überprüfen -in-vertical.html wird es dir geben; schönes Beispiel, wonach du fragst. –

+0

yeah das ist etwas, was ähnlich, aber es gibt keinen Code für, wie zu benachrichtigen, wenn Änderungen in SectionListDataAdapter –

+0

Zeigen Sie Ihre Eltern Recycle View Adapter Code..es muss ChildRecycleView in onBindViewHolder anstatt in ViewHolder Klasse festlegen ... –

Antwort

0

schließlich bekam ich meine Antwort heute, von einer anderen Art und Weise einfach i Adapter rufen 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); 
} 
1

Naja, zuerst Warum brauchen Sie in der anderen sogar eine Recycler-Ansicht? Es wird normalerweise durch erweiterbare Recycler-Ansicht gelöst. Here is a nice tutorial.

Zweitens sehe ich diese Zeile cartAdapter.notifyItemRemoved(id); wo ist die Benachrichtigung für den zweiten Recycler? Hast du einen Link dazu? Sie sollten notifyDataSetChanged() dafür anrufen!

Und OH MEIN GOTT GIBT ES SO VIEL ANONYME KLASSEN! Ich kann nicht einmal verstehen, was in Ihrem Code passiert! Es ist einfach unverständlich. Lass das Zeug los, ernsthaft.

+0

erweitert Recycling-Ansicht ist eine andere Sache. Ich will das nicht –

0

Like this Versuchen:

  @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(); 
       } 
      } 

Und in Ihrem Setter wie folgt tun:

//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(); 
    }