滑动视图寻呼机片段不应移动选项卡
Swiping the view pager fragment should not move the tabs
我的程序有一个布尔变量名称 "isCorrect"。我想,当 isCorrect 为 false 时,用户应该无法打开任何其他选项卡。 (通过滑动或选择选项卡)。我尝试通过以下给定的逻辑来执行此操作,但这会导致应用程序挂起。
final boolean isCorrect=false;
tabLayout.setOnTabSelectedListener(new TabLayout.OnTabSelectedListener() {
@Override
public void onTabSelected(TabLayout.Tab tab) {
if(!isCorrect){
if(tab.getPosition()==1){
mViewPager.setCurrentItem(0);
}
}else{
mViewPager.setCurrentItem(1);
}
}
定义自定义 ViewPager 子class。 class 继承自 ViewPager 并包含一个名为 setSwipeable 的新方法来控制是否启用滑动事件。确保更改布局文件。
public class LockableViewPager extends ViewPager {
private boolean swipeable;
public LockableViewPager(Context context) {
super(context);
}
public LockableViewPager(Context context, AttributeSet attrs) {
super(context, attrs);
this.swipeable = true;
}
@Override
public boolean onTouchEvent(MotionEvent event) {
if (this.swipeable) {
return super.onTouchEvent(event);
}
return false;
}
@Override
public boolean onInterceptTouchEvent(MotionEvent event) {
if (this.swipeable) {
return super.onInterceptTouchEvent(event);
}
return false;
}
public void setSwipeable(boolean swipeable) {
this.swipeable = swipeable;
}
}
当标志为 false 时禁用滑动。
if (!flag) {
mViewPager.setSwipeable(false);
} else {
mViewPager.setSwipeable(true);
}
我的程序有一个布尔变量名称 "isCorrect"。我想,当 isCorrect 为 false 时,用户应该无法打开任何其他选项卡。 (通过滑动或选择选项卡)。我尝试通过以下给定的逻辑来执行此操作,但这会导致应用程序挂起。
final boolean isCorrect=false;
tabLayout.setOnTabSelectedListener(new TabLayout.OnTabSelectedListener() {
@Override
public void onTabSelected(TabLayout.Tab tab) {
if(!isCorrect){
if(tab.getPosition()==1){
mViewPager.setCurrentItem(0);
}
}else{
mViewPager.setCurrentItem(1);
}
}
定义自定义 ViewPager 子class。 class 继承自 ViewPager 并包含一个名为 setSwipeable 的新方法来控制是否启用滑动事件。确保更改布局文件。
public class LockableViewPager extends ViewPager {
private boolean swipeable;
public LockableViewPager(Context context) {
super(context);
}
public LockableViewPager(Context context, AttributeSet attrs) {
super(context, attrs);
this.swipeable = true;
}
@Override
public boolean onTouchEvent(MotionEvent event) {
if (this.swipeable) {
return super.onTouchEvent(event);
}
return false;
}
@Override
public boolean onInterceptTouchEvent(MotionEvent event) {
if (this.swipeable) {
return super.onInterceptTouchEvent(event);
}
return false;
}
public void setSwipeable(boolean swipeable) {
this.swipeable = swipeable;
}
}
当标志为 false 时禁用滑动。
if (!flag) {
mViewPager.setSwipeable(false);
} else {
mViewPager.setSwipeable(true);
}