2016-04-15 8 views
0

ich auf diese Weise verwenden ViewPager aktuellen Ansicht zu erhalten:Wie ViewPager die aktuelle Ansicht zu erhalten, die die an Benutzer in onPageSelected eine Show ist

private class OuterAdapter extends PagerAdapter{ 

    private SwipingVideoPage currentPage; 

    @Override 
    public Object instantiateItem(ViewGroup container, int position) { 
     SwipingVideoPage page = new SwipingVideoPage(); 
     container.addView(page); 
     return page; 
    } 

    @Override 
    public void destroyItem(ViewGroup container, int position, Object object) { 
     container.removeView((View)object); 
    } 

    @Override 
    public void setPrimaryItem(ViewGroup container, int position, Object object) { 
     currentPage = (SwipingVideoPage)object; 
     super.setPrimaryItem(container, position, object); 
    } 

    public SwipingVideoPage getCurrenPage() { 
     return currentPage; 
    } 
} 

Ich denke, ich anrufen kann ViewPager.getAdapter.getCurrentPage() erhalten aktuelle Ansicht. Aber ich fand es nicht in ViewPager.OnPageChangeListener.onPageSelected() arbeiten:

private class OuterChangeListener implements ViewPager.OnPageChangeListener { 

    @Override 
    public void onPageSelected(int position) { 
     ((OuterAdapter)outerViewPager.getAdapter()).getCurrenPage() //this returns the previous shown view, not the right one 
    } 
} 

Vielleicht ist die onPageSelected() vor setPrimaryItem() genannt wird, ist das richtig?

Und wie bekommt man die ViewPage Hauptansicht in onPageSelected()?

+0

wollen Sie vollständige Ansicht oder nur Position dieser Ansicht –

+0

Ich brauche die vollständige Ansicht –

Antwort

4

Wie @Mohammad Fareed sagte ich keine Methode, um die aktuelle Seite direkt in ViewPager gefunden.

So verwende ich auf diese Weise das Problem zu lösen:

private Map<Integer, View> pageMap;  //records all the pages in the ViewPager 
private SwipingVideoPage currentPage; 

private class OuterAdapter extends PagerAdapter{ 

    @Override 
    public Object instantiateItem(ViewGroup container, int position) { 
     SwipingVideoPage page = new SwipingVideoPage(); 
     container.addView(page); 
     pageMap.put(position, page); //add page 
     return page; 
    } 

    @Override 
    public void destroyItem(ViewGroup container, int position, Object object) { 
     container.removeView((View)object); 
     pageMap.remove(position);  //remove page which is removed from ViewPager 
    } 
} 

private class OuterChangeListener extends ViewPager.SimpleOnPageChangeListener { 

    @Override 
    public void onPageSelected(int position) { 
     currentPage = pageMap.get(position); //get current page 
    } 
} 

ich diesen Code in meinem Projekt verwenden, und es funktioniert bis jetzt groß.

-2

in den neuesten Pakete können Sie auch

vp.getCurrentItem() 

oder

vp is the viewPager , 

pageListener = new PageListener(); 
vp.setOnPageChangeListener(pageListener); 

Sie für Ihre viewPager einen Seitenwechsel Hörer setzen müssen verwenden. Es gibt keine Methode auf viewPager, um die aktuelle Seite zu erhalten.

private int aktuelleSeite;

private static class PageListener extends SimpleOnPageChangeListener{ 
     public void onPageSelected(int position) { 
      Log.i(TAG, "page selected " + position); 
       currentPage = position; 
    } 
} 
+0

Ich weiß, dass ich die aktuelle Position bekommen kann, aber was ich will ist die Ansicht, die den Benutzern angezeigt wird. Gibt es keine Möglichkeit, die aktuelle Ansicht zu erhalten? –

+0

Sie haben die Frage nicht beantwortet. Er interessiert sich für View, nicht in der Positionsnummer. – hugofcampos

Verwandte Themen