我有一个扩展的 FragmentPagerAdapter,它为 ViewPager 提供 3 个片段,给我 3 个页面,我可以在它们之间滑动,也可以使用添加到操作栏的选项卡来手动选择页面。
我想暂时禁止用户使用任一导航类型访问最终页面(禁用任何特定页面的更通用的解决方案也很有趣,但不是必需的)。然后,我将通过来自其中一个片段的回调来重新启用他们的访问。
我已经阅读了一些类似问题的答案,这些问题涉及通过重写 onTouchEvent 和 onInterceptTouchEvent 来不允许滑动,然后在其中使用一些自定义手势检测,甚至使用 beginFakeDrag() 的半解决方案。
我当前的解决方案只是在适配器中设置较小的项目计数,确保使用notifyDataSetChanged(),并在必要时将其更改回来。这些方法是否有任何优雅的替代方案,也许不需要更改数据集?
我还发现 ActionBar.Tab 没有 setEnable() 方法,大多数人建议删除该选项卡。有没有办法让选项卡保持可见但不可选择?我的方法是定义禁用哪个选项卡,并在用户选择禁用的选项卡时重新选择之前选择的选项卡。
Edit:我的目标是禁用 Tab 键切换和滑动到最后一页。
您肯定会想要创建自己的自定义 ViewPager 子类。我创建了一个简单的自定义ViewPager
called CustomSwipePager
它将在需要时处理阻塞的用户交互。
public class CustomSwipeViewPager extends ViewPager {
private boolean mLastPageEnabled = false;
private int mLastPageIndex = 0;
public NoSwipeViewPager(Context context) {
super(context);
}
public NoSwipeViewPager(Context context, AttributeSet attrs) {
super(context, attrs);
}
public void setLastPageEnabled(boolean enabled) {
mLastPageEnabled = enabled;
}
public void setLastPageIndex(int index) {
mLastPageIndex = index;
}
@Override
public boolean onInterceptTouchEvent(MotionEvent event){
if(!mLastPageEnabled && getCurrentItem() >= (mLastPageIndex - 1)) {
// Always return false to disable user swipes
return false;
}
return true;
}
@Override
public boolean onTouchEvent(MotionEvent event) {
if (!mLastPageEnabled && getCurrentItem() >= (mLastPageIndex - 1)) {
// Always return false to disable user swipes
return false;
}
return true;
}
}
您需要在课堂上利用两种关键方法setLastPageEnabled()
and setLastPageIndex()
。您可以将最后一页索引设置为您需要的任何内容,在您的情况下,如果您有三个项目,则将其设置为 2。然后还可以使用setLastPageEnabled(false)
禁用刷卡或重新启用使用setLastPageEnabled(true)
.
您可以将此自定义视图包含到您的布局中,如下所示:
<com.mypackage.CustomSwipeViewPager
xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/custom_swipe_view_pager"
android:layout_width="match_parent"
android:layout_height="match_parent" />
最后在您的片段或活动中的适当位置引用它:
private CustomSwipeViewPager mPager;
@Override
protected void onCreate(Bundle savedInstanceState){
super.onCreate(savedInstanceState);
mPager = (CustomSwipeViewPager) findViewById(R.id.custom_swipe_view_pager);
mPager.setLastPageEnabled(false);
mPager.setLastPageIndex(2);
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)