我可以控制何时在TabLayout / ViewPager应用程序中允许滑动吗?

时间:2018-08-11 01:22:14

标签: android android-viewpager android-tablayout

我正在为第二个应用程序做一些原型设计,该应用程序将使用TabLayout和ViewPager以特定顺序显示一系列4个页面,以便用户可以逻辑方式执行任务。我将需要确保在完成早期页面上的工作之前,用户不会从早期页面跳到后续页面。在TabLayout / ViewPager应用中甚至可能吗?

到目前为止,我所看到的所有示例都展示了三个选项卡,并向用户展示了如何轻松地从一个选项卡滑动到另一个选项卡,然后再次返回。这些示例甚至都没有提示,可以防止滑动(或跳至)其他页面之一,直到满足给定条件。我需要了解在这种应用程序中限制滑动/跳动是否可行。

我希望用户在第一页上完成“工作”,然后通过单击“下一步”按钮来表明他/她已经完成。除非按下了NEXT,否则用户将无法继续进入另一页。 (NEXT按钮本质上是用户告诉应用程序他已完成第一页的方式。)同样,如果用户在后面的页面之一中,我不希望他能够返回到 most 页中的上一页:我想编写程序逻辑,以根据到目前为止发生的情况来决定是否可以将他带回上一页。

我可以执行Android Studio 3.1.4中的建议吗?如果是,我将使用哪些主要类别/方法来控制滑动和跳动?

如果这在Android中是不可能的,那么我应该使用哪种方法来构建我的应用程序?

1 个答案:

答案 0 :(得分:1)

使用Locked View Pager可以通过用户输入触摸禁用Viewpager中的滑动

public class LockableViewPager extends ViewPager {

private boolean swipeLocked;

public LockableViewPager(Context context) {
    super(context);
}

public LockableViewPager(Context context, AttributeSet attrs) {
    super(context, attrs);
}

public boolean getSwipeLocked() {
    return swipeLocked;
}

public void setSwipeLocked(boolean swipeLocked) {
    this.swipeLocked = swipeLocked;
}

@Override
public boolean onTouchEvent(MotionEvent event) {
    return !swipeLocked && super.onTouchEvent(event);
}

@Override
public boolean onInterceptTouchEvent(MotionEvent event) {
    return !swipeLocked && super.onInterceptTouchEvent(event);
}

@Override
public boolean canScrollHorizontally(int direction) {
    return !swipeLocked && super.canScrollHorizontally(direction);
}

}

在Tablayout中设置viewpager之后,尝试下面的Tablayout代码以禁用触摸时切换标签

LinearLayout tabStrip = ((LinearLayout)mTabLayout.getChildAt(0));
for(int i = 0; i < tabStrip.getChildCount(); i++) {
    tabStrip.getChildAt(i).setOnTouchListener(new View.OnTouchListener() {
        @Override
        public boolean onTouch(View v, MotionEvent event) {
            return true;
        }
    });
}

请参阅禁用选项卡触摸选择。

  

https://stackoverflow.com/a/37810306/3787344