2016-07-21 4 views
1

Ich brauche Hilfe zu verstehen, wie das folgende Szenario funktioniert und wie man das Ergebnis erreicht.Fragment Kommunikation - Fragment zu Fragment

Ich habe eine Klasse namens ShoppingCart. Es hat eine Methode namens addItemsToShoppingCartFromPreviousOrder. Jetzt habe ich ein Fragment namens PreviousOrderFragment mit onCreateView Methode, die die RecyclerView verwendet. Es ist eine Liste der früheren Bestellungen. Ich habe mehrere Listen. Nun möchte ich wissen, wie ich die addItemsToShoppingCartFromPreviousOrder Methode von ShoppingCart in mein Fragment aufrufen kann. Wenn der Benutzer auf eine Liste klickt, wird er zum Einkaufswagen hinzugefügt.

+2

Wollen Sie Ihre Zeit zu sparen, verwenden EventBus statt https://github.com/greenrobot/EventBus – kaitian521

+0

Die Methode namens 'addItemsToShoppingCartFromPreviousOrder' die Arbeit erledigt. Ich muss wissen, wie ich diese Methode anrufe oder wo ich sie nennen soll. Zum Beispiel, auf meinem Fragment 'onCreateView' habe ich den' onClickListner' hinzugefügt, wird nichts tun.Und ich kann die Third-Party-Bibliothek nicht verwenden. – Ronan

+0

Mögliches Duplikat von [Daten zwischen Fragmenten übergeben] (http://stackoverflow.com/questions/38452210/pass-data-between-fragments) – TapanHP

Antwort

1

Sie müssen das tun:

In Ihrem Adapter von RecycleView setzen:

private ItemListener mListener; 
    ... 
    public void setmListener(ItemListener mListener) { 
    this.mListener = mListener; 
    } 
    ... 
    public interface ItemListener { 
    void onItemSelected(Item item); 
    } 

Item = Der Artikel

ausgewählt

sie ... In Ihrem ViewHolder von Adapter setzen, dass:

public class Holder extends RecyclerView.ViewHolder implements View.OnClickListener { 

     public TextView tv_id; 
     public TextView tv_url; 
     public TextView tv_login; 

     public Holder (View itemView) { 
      super(itemView); 
      tv_id = (TextView) itemView.findViewById(R.id.tv_id); 
      tv_url = (TextView) itemView.findViewById(R.id.tv_url); 
      tv_login = (TextView) itemView.findViewById(R.id.tv_login); 

      itemView.setOnClickListener(this); 
     } 

     @Override 
     public void onClick(View v) { 
      if (mListener != null) { 
       Integer position = Integer.valueOf(getLayoutPosition()); 
       mListener.onUserSelected(mList.get(position)); 
      } 
     } 
    } 

OBS: Dieser ViewHolder ist eine InnerClass von Adapter

sie alle Sie tun müssen, ist:

In Ihrem Fragment

mRecycleViewAdapter.setmListener(this) 

Them Ihr Fragment machen:

public class MyFragment extends Fragment implements MyRecycleViewAdapter.ItemListener 

Und außer Kraft setzen:

@Override 
    public void onItemSelected(Item item) { 
     //call addItemsToShoppingCartFromPreviousOrder 
    } 

Here ist ein Beispiel siehe SearchFragment.java und UsersListAdapter.java

0

1- Erstellen Sie eine Schnittstelle rufen Sie es für ex. OnItemClicked

Interface OnItemClick{ 
    void onItemClicked(/*pass your selected object*/); 
} 

2- das Fragment dieser Schnittstelle

Class PreviousOrderFragment extends Fragment implements OnItemClicked{ 
void onItemClicked(/*pass your selected object*/){ 
     /** here you have the select object when item clicked from the activity **/ 
     addItemsToShoppingCartFromPreviousOrder(); 
} 
} 

3- Nehmen Sie ein Beispiel aus dem Fragment in der Aktivität

Class YOUR_Activity extends Activity { 
    PreviousOrderFragment fragment = new PreviousOrderFragment(); 
    /// in the onClick event 
    public onClick(View v){ 
    fragment.onItemClicked(/**pass the selected object*/); 
    } 

} 
0

siehe this answer, erklärte bereits alle Möglichkeiten machen implementieren Kommunikation zwischen Fragmenten herstellen.

Aber ein guter Weg, EventBus zu verwenden ist, wenn Sie die Kommunikation zwischen vielen Aktivitäten und Fragmente kompliziert sind, ist es sehr leicht und schnell, und ein besserer Ansatz dann jede dieser oben beschriebenen verknüpft Antwort.