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);
}
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
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. –
Haben Sie versucht, die Anweisungen zu trennen? int aktuelleItem = pages.getCurrentItem(); aktuelleItem ++; pages.setCurrentItem (currentItem); –