在Android TabLayout中禁用选项卡之间的滑动。

3
我正在开发一个Android应用程序,其中包括一个页面,该页面具有一个选项卡布局,包括两个选项卡,一个列表页面和一个地图(两者都是片段)。列表元素是视图持有器,包含图片,但是当用户在视图持有器中到达最后一张图片时,选项卡布局会获取下一个滑动事件,并切换到地图。如果用户试图从屏幕的极右侧开始向左滑动图片,则也会发生这种情况。
我想完全关闭选项卡之间的滑动功能,但没有找到方法来实现它。
以下是我设置选项卡的方式:
ViewPager fragmentPager = (ViewPager) findViewById(R.id.viewpager);
fragmentPager.setAdapter(new MyPagerAdapter);//extends FragmentPagerAdapter
TabLayout tabLayout = (TabLayout) findViewById(R.id.tablayout);
tabLayout.setupWithViewPager(fragmentPager);

Viewpager的onPageChangeListener中使用return false可能会阻止选项卡的切换。但是,如果您在此处粘贴一些您尝试过的源代码,这将有助于我们解决您的问题。 - Madhukar Hebbar
问题在于TabLayout不是ViewPager,它扩展了HorizontalScrollView。问题已经更新,并附带了一些代码,感谢您的帮助! - Analizer
你是说NonSwipeableViewPager吗? - silentsudo
不对,"TabLayout扩展了HorizontalScrollView",或者我理解错了什么? - Analizer
你解决了这个问题吗? - Vinodh Kumar
我已经发布了一个解决方案,请尝试一下。@VinodhKumar - Sam
1个回答

0

你可以使用自定义视图页来实现这个功能。

创建一个名为Custom_viewpager的类,并在XML中扩展它。

public class Custom_viewpager extends ViewPager {

private boolean enabled;

public Custom_viewpager(Context context, AttributeSet attrs) {
    super(context, attrs);
    this.enabled = true;
}

@Override
public boolean onTouchEvent(MotionEvent event) {
    return enabled ? super.onTouchEvent(event) : false;
}

@Override
public boolean onInterceptTouchEvent(MotionEvent event) {
    return enabled ? super.onInterceptTouchEvent(event) : false;
}

public void setPagingEnabled(boolean enabled) {
    this.enabled = enabled;
}

public boolean isPagingEnabled() {
    return enabled;
}

当您想要禁用滑动时,只需添加这两行代码。

viewPager.setPagingEnabled(false);
viewPager.beginFakeDrag();

如果有帮助,请告诉我。:)


beginFakeDrag 应该做什么? - Chris Neve

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接