首页 > 解决方案 > 在特定视图上滑动时禁用 ViewPager 滑动

问题描述

我想保留我的滑动功能ViewPager但是我想View在我的布局文件中滑动某个特定时禁用它(Preference我正在扩展的自定义):

活动.xml

<androidx.viewpager.widget.ViewPager
    android:id="@+id/viewpager"
    android:layout_width="match_parent"
    android:layout_height="match_parent">
</androidx.viewpager.widget.ViewPager>

活动.kt

override fun onCreate(savedInstanceState: Bundle?) {
    super.onCreate(savedInstanceState)
    setContentView(R.layout.activity_home)
    viewpager.addOnPageChangeListener(this)
    // Initialise FragmentAdapter
    val fragmentAdapter = ScreenSlidePagerAdapter(supportFragmentManager)
    viewpager.adapter = fragmentAdapter
    viewpager.currentItem = 1
}


private inner class ScreenSlidePagerAdapter(fm: FragmentManager) : FragmentStatePagerAdapter(fm){
    override fun getItem(position: Int): Fragment {
        return when(position){
            0 -> {
                SettingsFragment()
            }
            2 -> {
                UserFragment()
            }
            else -> {
                MainFragment()
            }
        }
    }
    // 3 Fragments
    override fun getCount(): Int {
        return 3
    }

}

我怎样才能做到这一点?

标签: javaandroidkotlin

解决方案


您可以使用此代码来实现您的目标。

class LockableViewPager : ViewPager {
    private var swipeable: Boolean = false

    constructor(context: Context) : super(context) {}

    constructor(context: Context, attrs: AttributeSet) : super(context, attrs) {
        this.swipeable = true
    }

    override fun onTouchEvent(event: MotionEvent): Boolean {
        return if (this.swipeable) {
            super.onTouchEvent(event)
        } else false
    }

    override fun onInterceptTouchEvent(event: MotionEvent): Boolean {
        return if (this.swipeable) {
            super.onInterceptTouchEvent(event)
        } else false
    }

    fun setSwipeable(swipeable: Boolean) {
        this.swipeable = swipeable
    }
}

然后你只需要打电话

setSwipeable(false)

希望这可以帮助。谢谢你


推荐阅读