2016-04-25 8 views
0

Ich versuche, auf die angegebene Seite in viewPager zu verschieben.Android ViewPager setCurrentItem lädt die angeforderte Seite nicht

Mein Code ist -

if(isFirstCall) { 
     mPagerAdapter = new ScreenSlidePagerAdapter(getFragmentManager(), pageId); 
     mPager.setAdapter(mPagerAdapter); 
    } 

    new Handler().post(new Runnable() { 
     @Override 
     public void run() { 
      mPager.setCurrentItem(currentPagePosition); 
     } 
    }); 

    mPager.addOnPageChangeListener(new ViewPager.SimpleOnPageChangeListener() { 

     private static final float thresholdOffset = 0.5f; 

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

      super.onPageScrolled(position, positionOffset, positionOffsetPixels); 


      if (checkDirection) { 

       mPager.setPagingEnabled(false); 

       if (thresholdOffset > positionOffset) { 
        checkDirection = false; 

        // Call service to get next page position 
       } else { 
        checkDirection = false; 

        // Call service to get prev page position 
       } 

      } 

     } 

     @Override 
     public void onPageScrollStateChanged(int state) { 

      super.onPageScrollStateChanged(state); 

      if ((scrollStarted == false) && (state == ViewPager.SCROLL_STATE_DRAGGING)) { 
       scrollStarted = true; 
       checkDirection = true; 
      } else { 
       scrollStarted = false; 
      } 

     } 

     @Override 
     public void onPageSelected(int position) { 

     } 
    }); 

Wenn ich versuche, die currentPagePosition Variable zu aktualisieren, die viewPager hängt und bewegt sich nicht auf die angegebene Seite sofort. (Es wird beobachtet, dass nach ungefähr 10-15 Minuten die angegebene Seite aufgerufen wird.)

Während, wenn ich den Wert der Variable currentPagePosition nicht verändere, funktioniert alles gut (aber es bewegt sich auf eine andere Seite als ich einen falschen Wert erhalten).

Ich kann nicht verstehen, was falsch läuft.

Bitte helfen ..

Beobachtung -

Meine Beobachtung ist, dass - onPageScrollStateChanged Methode nicht mit state = 1 was zum Ausfall der Bedingung in onPageScrolled aufgerufen. Also die nächste Seite wird nicht aufgerufen. Ich habe keine Ahnung, warum onPageScrollStateChanged nicht für den Status 'SCROLL_STATE_DRAGGING' aufgerufen wird.

Antwort

0

ändern

new Handler().post(new Runnable() { 
    @Override 
    public void run() { 
     mPager.setCurrentItem(currentPagePosition); 
    } 
}); 

in

mPager.setCurrentItem(currentPagePosition); 
mPagerAdapter.notifyDataSetChanged(); 

Sie sollten UI Änderung bezogenen Code in das Haupt-UI-Thread ausgeführt.

+0

Das hat nicht geholfen. –

+0

hast du notifyDataSetChanged() –

+0

aufgerufen Ich bekomme die Seitenliste vom Server nach der nächsten/vorherigen Seite Folie. Ich habe notifyDataSetChanged() nicht aufgerufen, weil mein Datenarray global ist und sobald ich die Antwort vom Server bekomme, wird das Array modifiziert. –

Verwandte Themen