如何禁用 FragmentStatePagerAdapter 上的滑动?

问题描述 投票:0回答:2

我正在按照教程here使用TabLayout和

FragmentStatePagerAdapter
。一切都很棒,除了我需要禁用第二个选项卡上的滑动,因为它使用水平滚动。如果对所有选项卡禁用滚动也没关系,但如果仅对第二个选项卡禁用滚动那就太棒了。

对于 ViewPager 来说,我似乎会重写

onInterceptTouchEvent()
方法,但这似乎不是
FragmentStatePagerAdapter
的选项。关于如何做到这一点有什么想法吗?谢谢。

编辑:我只有两个片段,因此如果 FragmentStatePagerAdapter 不合适,我愿意接受建议。

编辑2:无法刷卡的问题已解决。但是,我仍然想知道如何防止仅刷第二个片段。

android android-fragments android-viewpager fragmentstatepageradapter
2个回答
0
投票

修改

onInterceptTouchEvent
onTouchEvent
以仅排除您想要的选项卡索引:

@Override
public boolean onInterceptTouchEvent(MotionEvent event) {
    switch(getCurrentItem()){
        case 1:
            return false;
        default:
            return super.onInterceptTouchEvent(event);
    }
}

@Override
public boolean onTouchEvent(MotionEvent event) {
    switch(getCurrentItem()){
        case 1:
            return false;
        default:
            return super.onTouchEvent(event);
    }
}

0
投票

好的,这就是如何完成的:

这是我的 FragmentStateAdapter -

class ViewPagerAdapter(
    fragmentManager: FragmentManager,
    private val totalTabs: Int,
    lifecycle: Lifecycle,
) : FragmentStateAdapter(fragmentManager, lifecycle) {

    override fun getItemCount(): Int = totalTabs

    override fun createFragment(position: Int): Fragment {
        return when (position) {
            0 -> RadioFragment()
            1 -> ThingsToDoInTheAreaMapFragment()
            2 -> SavedRadioStationsFragment()
            else -> RadioFragment()
        }
    }

}

这是 XML:

<androidx.viewpager2.widget.ViewPager2
    android:id="@+id/view_pager"
    android:layout_width="match_parent"
    android:layout_height="0dp"
    android:visibility="gone"
    app:layout_constraintTop_toTopOf="parent"
    app:layout_constraintEnd_toEndOf="parent"
    app:layout_constraintStart_toStartOf="parent"
    app:layout_constraintBottom_toTopOf="@+id/app_bar_layout" />

这是我的实现:

binding.viewPager.adapter = ViewPagerAdapter(
                supportFragmentManager,
                binding.tabsLayout.tabCount,
                lifecycle
            )

然后要禁用滑动,请在创建适配器后添加以下行:

binding.viewPager.isUserInputEnabled = false
© www.soinside.com 2019 - 2024. All rights reserved.