2017-11-06 26 views
0

Ich möchte zwischen Elternteil und Kind kommunizieren fragment. Ich habe so viele Beiträge auf SO gelesen, aber keiner der Beiträge scheint mir nützlich zu sein.Verschachteltes Fragment Kommunikation

Ich habe 3 FragmentsFragmentA, FragmentB und FragmentC.

FragmentA ist ein Elternteil für fragmentFragmentB und FragmentB ist geordneten Fragment von FragmentC.

FragmentA hat EditText mit TextWatcher und viewpager mit Registerkarten implementiert. FragmentB hat eine andere Viewpager mit Tabs. (Also grundsätzlich verwende ich verschachtelte Registerkarte, die nicht empfohlen wird, aber ich muss wirklich dieses Szenario verwenden). FragmentC hat recyclerView, die dann eine Liste der Produkte basierend auf ausgewählten Tabs zeigt. das funktioniert gut für mich.

Jetzt möchte ich hinzufügen Suchfunktionalität für Produkte in FragmentC (Suche wird in webservice durchgeführt und Webservice für die Produktauflistung heißt von FragmentC).

Um dies zu realisieren, was ich so weit ist, wird das Setup viewpager fragmenta auf Web-Antwort basiert und hier ist ein Verfahren zur Einrichtung viewpager in fragmenta getan haben. (Der Kodex bezieht sich auf, wie ich die Instanz von Fragment erhalten)

FragmentB hat eine andere ViewPager die dann wie folgt implementiert.

private void setUpViewPager(ViewPager viewpager) { 
     ViewPagerAdapter adapter = new ViewPagerAdapter(getChildFragmentManager()); 

     for (int i = 0; i < retailerCategoryArr.getChild().size(); i++) { 
      RetailerCategoryArr.RetailerSubCategoryArr retailerSubCategoryArr = retailerCategoryArr.getChild().get(i); 
      FragmentC FragC = FragmentC.newInstance(retailerSubCategoryArr.getId(), retailer); 
      adapter.addFragment(FragC, retailerSubCategoryArr.getName()); 

     } 
     viewpager.setAdapter(adapter); 
     tabs.setupWithViewPager(viewpager); 
    } 

So ist die Frage, wie kann ich die textchange von Edittext von FragmentA in FragmentC hören? Wenn dies über die Schnittstelle möglich ist, wie?

+0

https://developer.android.com/training/basics/fragments/communicating.html – Kuffs

+0

@Kuffs Danke für Ihre Antwort. Aber ich habe diesen Beitrag bereits gelesen und ich verstehe wirklich nicht, wie das in meinem Szenario erreicht werden kann. Kannst du bitte deine Antwort kurz formulieren? –

+0

Wenn Sie Probleme haben, den dokumentierten Weg der Fragmentkommunikation zu verfolgen, sollten Sie Ihre Frage wahrscheinlich bearbeiten, um genau zu erklären, welches Problem Sie haben und warum Sie Probleme haben. Niemand möchte die Dokumentation für Sie kopieren. – Kuffs

Antwort

0

Von FragmentC versuchen, dies zu tun:

Fragment frag = getParentFragment(); //it will be FragmentB 
FragmentA fragA = (FragmentA)frag.getParentFragment(); 
fragA.editText.addTextChangedListener(new TextWatcher() { 
    ... 
}); 
0

Sie Schnittstelle und Geräte in übergeordnete Aktivität machen können textwatcher von Fragment A.

interface Test{ 
     void setTextChange(String ch); 
    } 

Geordnete Aktivität zu hören implementieren Sie Hörer

public class FragmenA extends Fragment{ 
    Test mCallback; 
    public Edittext; 


    @Override 
    public void onAttach(Activity activity) { 
     super.onAttach(activity); 

     // This makes sure that the container activity has implemented 
     // the callback interface. If not, it throws an exception 
     try { 
      mCallback = (Test) activity; 
     } catch (ClassCastException e) { 
      throw new ClassCastException(activity.toString() 
        + " must implement Test"); 
     } 
    } 


} 



public class MainActivity extends Activity 
       implements FragmentA.Test{ 

       Fragment fragmentc=getFragmentManager().findFragmentByTag(FragmentC.class); 



      public setTextChange(String ch) { 
        if(fragmentc!=null){ 

         fragmentc.onChangeText(ch); 
     } 
      } 
     } 


     public class FragmenC extends Fragment{ 
      Test mCallback; 


      public void onChangeText(String text){ 
     } 


     } 
Verwandte Themen