fragments - android viewpager example



PagerAdapter Startposition (6)

Ich bin auf dasselbe Problem gestoßen. Wenn ich ViewPager initialisiere, ist die Indikatorposition 0. Dies kann von der Berechnungsmenge für den Pager-Inhalt abhängen. Ich benutze ViewTreeObserver wie unten.

mGlobalLayoutListener = new ViewTreeObserver.OnGlobalLayoutListener() {
    @Override
    public void onGlobalLayout() {
        mViewPager.setCurrentItem(newPosition);
        removeOnGlobalLayoutListener(mSlidingTabLayout.getViewTreeObserver(), mGlobalLayoutListener);
    }
};
mSlidingLayout.getViewTreeObserver().addOnGlobalLayoutListener(mGlobalLayoutListener);

und,

private void removeOnGlobalLayoutListener(ViewTreeObserver observer, ViewTreeObserver.OnGlobalLayoutListener listener) {
       if (observer == null) return;
       if (Build.VERSION.SDK_INT < Build.VERSION_CODES.JELLY_BEAN) {
               observer.removeGlobalOnLayoutListener(listener);
       } else {
               observer.removeOnGlobalLayoutListener(listener);
       }
} 

Auf diese Weise, auch nie mit der Zeiteinstellung der Verzögerung zu stören.

Ich verwende das folgende Beispiel, um meinen viewPager einzubinden: http://code.google.com/p/viewpagerexample/issues/list

Das Problem mit diesem Beispiel ist, dass ich nicht herausfinden kann, wie ich meine Startposition einstellen soll, die Standard-Startposition ist 0. Grundsätzlich kann ich nicht kontrollieren, ob links oder rechts eine freie Sicht besteht.

Gibt es eine Möglichkeit, die aktuelle Position des Kontrollzentrums zu überprüfen? Gibt es einen besseren Weg, es zu tun? Ist es möglich, es kreisförmig zu machen?


Answer #1

Ich bin auf ein Problem gestoßen, bei dem, wenn ich den aktuellen Gegenstand vor dem Einstellen des Adapters einstelle, der erste Gegenstand, den ich zurückbekomme, immer der an Position 0 ist.

Stellen Sie sicher, dass Sie Folgendes tun:

awesomePager.setAdapter(awesomeAdapter);
awesomePager.setCurrentItem(CurrentPosition);

und nicht:

awesomePager.setCurrentItem(CurrentPosition);
awesomePager.setAdapter(awesomeAdapter);

Answer #2

Ich habe einen Weg gefunden, seine Position außerhalb der Klasse festzulegen:

 awesomePager = (ViewPager) findViewById(R.id.awesomepager);
 awesomePager.setAdapter(awesomeAdapter);
 awesomePager.setCurrentItem(CurrentPosition);

und es kann begrenzt werden, indem man die Menge der Artikel berechnet, die ich hineinpassen will


Answer #3

Ich habe festgestellt, dass wenn Sie Aktivität (Orientierungsänderung) mit ViewPager mit FragmentStatePagerAdapter neu erstellen, der Adapter seine Fragmente wiederverwenden wird. Der Weg, um es zu stoppen ist:

@Override
public void onSaveInstanceState(Bundle savedInstanceState) {
    if (viewPager != null) {
        // before screen rotation it's better to detach pagerAdapter from the ViewPager, so
        // pagerAdapter can remove all old fragments, so they're not reused after rotation.
        viewPager.setAdapter(null);
    }
    super.onSaveInstanceState(savedInstanceState);
}

aber nach der Aktivitäts-Erholung öffnet ViewPager immer die Seite 0 zuerst und setCurrentItem (CurrentPosition); funktioniert nicht. Fix für das Ändern der Seite nach der Verzögerung:

new Handler().postDelayed(new Runnable() {
    @Override
    public void run() {
        viewPager.setCurrentItem(newPosition);
    }
}, 100);

Answer #4

Um mit dem letzten Fragment zu beginnen, tat ich Folgendes:

PagerAdapter pagerAdapter = new PagerAdapter();
viewPager.setAdapter(pagerAdapter);
viewPager.setCurrentItem(pagerAdapter.getCount() - 1);

Answer #5
@Override
public Object instantiateItem(ViewGroup container, int position) {
    View currentPage = null;
    switch(position){
        case 0:
            currentPage = LayoutInflater.from(context).inflate(R.layout.page0, null)    
            break;
        case 1:
            currentPage = LayoutInflater.from(context).inflate(R.layout.page1, null)    
            ///////////// This page will be default ////////////////////
            ((ViewPager)container).setCurrentItem(position);
            ////////////////////////////////////////////////////////////
            break;
        case 2:
            currentPage = LayoutInflater.from(context).inflate(R.layout.page2, null)    
            break;
    return currentPage;
}




swipe