Ich habe Probleme beim Implementieren von setCurrentItem auf meinem Viewpager.Android ViewPager setCurrentItem funktioniert nicht
Ich versuche, die Ganzzahl in shared Pref zu speichern, also wenn der Benutzer zu der Aktivität zurückkehrt, ist es auf derselben Seite, auf der sie aufgehört haben.
Hier ist meine Tätigkeit mit dem viewpager:
public class MyWorkout extends BaseActivity {
NonSwipeableViewPager vp;
TextView txtViewTitle;
String workoutTitle;
SharedPreferences pref;
private final String LOG = MyWorkout.class.getSimpleName();
@Override
protected void onCreate(@Nullable Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
pref = getApplicationContext().getSharedPreferences("MyPref", 0);
SharedPreferences.Editor editor = pref.edit();
int currentPage = pref.getInt("currentPage", 0);
setContentView(R.layout.my_workout);
mToolBar = activateToolbar();
setUpNavigationDrawer();
getSupportActionBar().setTitle("My Workout");
workoutTitle = pref.getString("current_workout", "default");
Button btnPrev = (Button) findViewById(R.id.btnPrevious);
Button btnNext = (Button) findViewById(R.id.btnNext);
vp = (NonSwipeableViewPager) findViewById(R.id.view_pager);
txtViewTitle = (TextView) findViewById(R.id.txtViewTitle);
this.addPages(vp);
vp.setCurrentItem(currentPage);
Log.d(LOG, "current value is " + currentPage);
btnNext.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
MoveNext();
}
});
btnPrev.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
MovePrevious();
}
});
public void MoveNext() {
vp.setCurrentItem(vp.getCurrentItem() + 1);
int current = vp.getCurrentItem();
pref.edit().putInt("currentPage", current).apply();
Log.d(LOG, "current value is " + current);
}
public void MovePrevious() {
vp.setCurrentItem(vp.getCurrentItem() - 1);
int current = vp.getCurrentItem();
pref.edit().putInt("currentPage", current).apply();
Log.d(LOG, "current value is " + current);
}
Ich weiß, es richtig ist das Hinzufügen/auf den gemeinsam genutzten pref auf dem Protokoll basiert subtrahiert wird. Wenn ich auf "Weiter" klicke, wird eins hinzugefügt, bei "Vorheriges" wird eins subtrahiert. Das Problem muss mit der Zeile sein:
Wenn ich auf die Seite zurück gehe, geht es immer auf die erste Seite zurück.
Hier ist mein NonSwipeableViewPager:
public class NonSwipeableViewPager extends ViewPager {
public NonSwipeableViewPager(Context context) {
super(context);
setMyScroller();
}
public NonSwipeableViewPager(Context context, AttributeSet attrs) {
super(context, attrs);
setMyScroller();
}
@Override
public boolean onInterceptTouchEvent(MotionEvent event) {
// Never allow swiping to switch between pages
return false;
}
@Override
public boolean onTouchEvent(MotionEvent event) {
// Never allow swiping to switch between pages
return false;
}
//down one is added for smooth scrolling
private void setMyScroller() {
try {
Class<?> viewpager = ViewPager.class;
Field scroller = viewpager.getDeclaredField("mScroller");
scroller.setAccessible(true);
scroller.set(this, new MyScroller(getContext()));
} catch (Exception e) {
e.printStackTrace();
}
}
@Override
public int getCurrentItem() {
return super.getCurrentItem();
}
@Override
public void setCurrentItem(int item) {
super.setCurrentItem(item);
}
public class MyScroller extends Scroller {
public MyScroller(Context context) {
super(context, new DecelerateInterpolator());
}
@Override
public void startScroll(int startX, int startY, int dx, int dy, int duration) {
super.startScroll(startX, startY, dx, dy, 350 /*1 secs*/);
}
}
}
Und hier ist MyFragPagerAdapter:
public class MyFragPagerAdapter extends FragmentPagerAdapter {
ArrayList<Fragment> pages = new ArrayList<>();
public MyFragPagerAdapter(FragmentManager fm) {
super(fm);
}
@Override
public Fragment getItem(int position) {
return pages.get(position);
}
@Override
public int getCount() {
return pages.size();
}
//ADD A PAGE
public void addPage(Fragment f) {
pages.add(f);
}
}
Ich bin sicher, es ist etwas einfach fehle ich, aber vielleicht ein frisches Paar Augen helfen! Danke vielmals!
Danke für die Antwort. Ich denke, die shared prefs funktioniert gut, weil sogar das Protokoll direkt nach setCurrentItem mir den richtigen Wert gibt. Ich habe auch versucht, aktuelle Seite auf nur 5 zu setzen, um zu sehen, ob es funktionieren würde, leider hat es auch nicht funktioniert – LBJ33