2017-03-16 3 views
3

Wenn ich eine Kinderansicht von Elementen 0 bis 2 in Viewpager bekommen, funktioniert es gut. Wenn ich versuche, ab 3 eine Kinderansicht zu erhalten, wird null zurückgegeben. Wie kann ich die aktuell ausgewählte untergeordnete Ansicht von viewpager bekommen?Erhalten Kinder Ansichten der aktuell ausgewählten Elemente in Viewpager

Edited:

View view = viewPager.getChildAt(viewPager.getCurrentItem()); 

Wenn viewPager.getCurrentItem() Weiter 3 erreicht, wobei die Ansicht return null.

+0

Können Sie den Code, den Sie verwenden schreiben die Frage zu klären? – zsmb13

+0

Wie viele Fragmente laden Sie in Viewpager? –

+0

@JaydeepPatel 5 –

Antwort

2

Sie müssen auf die Fragments zugreifen, die Sie in Ihrem ViewPager verwenden.

In dieser Antwort https://stackoverflow.com/a/39274141/1559852 i zu erklären versucht, wie Sie Ihren ViewPager's Adapter o ändern machen die Fragmente, die Sie in Ihrem ViewPager zugänglich verwenden.

Nachdem Sie den Code in Link implementiert haben, können Sie auf Ihre Fragmente und ihre Ansichten zugreifen.

eine öffentliche Methode, um Ihre Fragmente definieren unten wie:

public View getMyFragmentView(){ 
    return this.mView(); 
} 

Endlich ein OnPageChangeLsitener auf Ihre ViewPager wie den folgenden Code hinzu.

viewPager.addOnPageChangeListener(new ViewPager.OnPageChangeListener() { 

     @Override 
     public void onPageScrolled(int position, float positionOffset, int positionOffsetPixels) { 

     } 

     @Override 
     public void onPageSelected(int position) { 
      // Here's your instance 
      final YourFragment fragment =(YourFragment)yourPagerAdapter.getRegisteredFragment(position); 
      final View theViewYouWantToAccess = yourFragment.getMyView(); 

     } 

     @Override 
     public void onPageScrollStateChanged(int state) { 

     } 
    }); 

bearbeiten: In Ihrem ViewPager Adapter können Sie sich registrieren die Fragment zu SparseArray

@Override 
public Fragment getItem(int position) { 
    final YourFragment fragment = new YourFragment(); 

    // Register your fragment to Sparse Array here 
    registeredFragments.put(position, fragment); 

    return fragment; 
} 
+0

Vielen Dank für Ihre Antwort. Aber wie kann ich zuerst alle meine Fragmente in das SparseArray einleiten? –

+0

brauchst du das nicht. Fügen Sie es einfach zu Ihrem Sparse-Array hinzu, wenn Sie in der getItem-Methode Ihres Adapters ein neues Fragment zurückgeben. Ich werde meine Antwort bearbeiten. – savepopulation

+0

Danke, ich werde es ausprobieren =) –

Verwandte Themen