2015-03-10 8 views
6

Ich schrieb eine benutzerdefinierte ViewPager zu deaktivieren Swipe Scroll, aber ich möchte programmatisch wischen. Ich habe drei Tab in meiner Ansicht Pager, aber wenn ich viewPager.setCurrentItem(viewPager.getCurrentItem()+1) auf der ersten Fragment aufrufen, bewegt es sich auf die dritte Fragment anstelle der zweiten Fragment. Und wenn ich die gleiche Funktion in der zweiten Fragment aufrufen, geht es an die dritte. Wenn ich (viewPager.getCurrentItem() - 1) `im dritten Fragment anrufe, funktioniert es gut, indem ich zurück gehe. Jede Hilfe wäre willkommen. Mein Code ist unten:ViewPager set aktuelle Seite programmatisch

NonSwipeAbleViewPager

public class NonSwipeableViewPager extends ViewPager { 

private boolean swipeable; 

public NonSwipeableViewPager(Context context, AttributeSet attrs) { 
    super(context, attrs); 
    TypedArray a = context.obtainStyledAttributes(attrs, R.styleable.MyViewPager); 
    try { 
     swipeable = a.getBoolean(R.styleable.MyViewPager_swipeable, true); 
    } finally { 
     a.recycle(); 
    } 
} 

@Override 
public boolean onInterceptTouchEvent(MotionEvent event) { 
    return swipeable ? super.onInterceptTouchEvent(event) : false; 
} 

@Override 
public boolean onTouchEvent(MotionEvent event) { 
    return swipeable ? super.onTouchEvent(event) : false; 
} 
} 

Deklaration in XML

<co.example.customview.NonSwipeableViewPager 
    android:id="@+id/pager" 
    android:layout_width="match_parent" 
    android:layout_height="0dp" 
    android:layout_weight="1" 
    app:swipeable="false" /> 

Nannte es

@Override 
public boolean onOptionsItemSelected(MenuItem item) { 
    switch (item.getItemId()) { 
     case R.id.menuNext: 
      NonSwipeableViewPager pages = (NonSwipeableViewPager) getActivity().findViewById(R.id.pager); 
      pages.setCurrentItem(pages.getCurrentItem()+1, true); 
      break; 
     default: 
      return super.onOptionsItemSelected(item); 
    } 
    return super.onOptionsItemSelected(item); 
} 
+0

Sind Sie sicher, dass, wenn Sie auf der MenüNext-Taste die erste Taste drücken Sie auf dem Fragment bei Index 0 sind? – Blackbelt

+0

Ich denke, ich erinnere mich an einige ähnliche Merkwürdigkeiten, wenn ich irgendwann so damit arbeite. Ich kann mich einfach nicht erinnern, was die Auflösung war. –

+0

Haben Sie versucht, die Anweisungen zu trennen? int aktuelleItem = pages.getCurrentItem(); aktuelleItem ++; pages.setCurrentItem (currentItem); –

Antwort

8

In Ihrem PagerActivity

viewPager = (ViewPager) findViewById(R.id.view_pager); 
    viewPager.setOnPageChangeListener(new ViewPager.OnPageChangeListener() { 
     @Override 
     public void onPageSelected(int position) { 
      int pagei = position + 1; 
      pages=pagei + ""; 

      Toast.makeText(PagerActivity.this, getString(R.string.changeinfopage) + " " + pages, Toast.LENGTH_SHORT).show(); 
     } 

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

     @Override 
     public void onPageScrollStateChanged(int state) { 
     } 
    }); 

und

@Override 
    public boolean onOptionsItemSelected(MenuItem item) { 


     switch (item.getItemId()) { 

      case R.id.action_previous: 

       viewPager.setCurrentItem(viewPager.getCurrentItem() - 1); 
       return true; 

      case R.id.action_next: 

       viewPager.setCurrentItem(viewPager.getCurrentItem() + 1); 
       return true; 
     } 

     return super.onOptionsItemSelected(item); 

    } 
3
viewPager.setCurrentItem(idx); 

verwenden, wo idx 0 basierend ganze Zahl ist.