3

Ich habe einen ViewPager mit einem TabLayout mit mehreren Fragmenten. Ich möchte auf eine Schaltfläche aus einem der ViewPager-Fragmente klicken und den Benutzer mithilfe des Tabnamens auf eine andere Registerkarte/ein anderes Fragment verweisen.Change ViewPager Fragment von Child Fragment

Wenn die Schaltfläche geklickt wird, möchte ich das TabLayout ändern sowie das Fragment anzeigen, das dieser Registerkarte zugeordnet ist. Ich würde auch zusätzliche Daten mit der Anfrage senden müssen, um auf dem neuen Fragment zu zeigen.

Ich habe keinen Zugriff auf den ViewPager setCurrentItem (int-Index). Im Idealfall möchte ich mit dem Elternteil kommunizieren, um die Anfrage zu vervollständigen.

Antwort

3

Sie sollten ein schreiben Verfahren wie in den übergeordneten so (die ViewPager und die Unterfragmente enthalten):

public void setPagerFragment(int a) 
{ 
    pager.setCurrentItem(a); 
} 

Dadurch wird das aktuelle Fragment in dem ViewPager gesetzt derjenige sein spezifiziert. Anschließend können Sie mit dieser Methode aus dem Kind Fragment nennen:

int newFrag = 0; //the number of the new Fragment to show 
ParentActivity parent = (ParentActivity) getActivity(); 
parent.setPagerFragment(newFrag); 

zusätzliche Daten mit der Anforderung auf dem neuen Fragment zeigen In Bezug auf das Senden Sie eine andere Methode in der übergeordneten machen kann, um in das Kind genannt zu werden, die legt einige Daten im übergeordneten Element fest, die das übergeordnete Element beim Festlegen des neuen Fragments verwenden kann.

Zum Beispiel in der Mutter:

public void setExtraData(Object data) 
{ 
    dataFromChildFrag = data; 
} 

Und wie so in dem Kind verwenden:

String data = "My extra data"; //the number of the new Fragment to show 
ParentActivity parent = (ParentActivity) getActivity(); 
parent.setExtraData(data); 

Schließlich, wenn die Eltern in der Tat selbst ein Fragment ist eher als eine Aktivität, einfach ersetzen Sie alle Verweise von:

ParentActivity parent = (ParentActivity) getActivity(); 

zu:

ParentFragment parent = (ParentFragment) getParentFragment(); 

Ich hoffe, das hilft!

0

Der einfachste Weg, dies zu erreichen, mit einem EventBus-Framework!

Ich ziehe (ed) mit EventBus by greenRobot

Wie implementieren:

1) eine Ereignisklasse erstellen, die Ihren Bedürfnissen

public class ClickedButtonInsideFragmentEvent { 

    // some data you want to store 

} 

2) bereiten Sie Ihre Abonnenten erfüllt! In Ihrem Fall wäre dies die Aktivität sein, die den Verweis auf die Registerkarte Layout enthält:

public class MyTabActivity { 

    public void onCreate(Bundle savedInstanceSate) { 
     // your stuff you do in onCreate 
     eventBus.register(this); 
    } 

    @Subscribe 
    public void onEvent(ClickedButtonInsideFragmentEvent event) { 
     // Do what you want to do 
    } 

} 

3) und schließlich: post die Veranstaltung von Ihrem OnClickListener Insider Ihr Fragment:

public class MyClickableFragment { 

    public void initOnClickListiner(View clickableView) { 
     clickableView.setOnClickListener(new OnClickListener() { 
      public void onClick(View view) { 
       ClickedButtonInsideFragmentEvent event = new ClickedButtonInsideFragmentEvent(); 
       // add what you want to your event 
       eventBus.post(event);     
      } 
     )); 
    } 

    @Subscribe 
    public void onEvent(ClickedButtonInsideFragmentEvent event) { 
     // Do what you want to do 
    } 

} 
Verwandte Themen