Отключить прокрутку ViewPager при перелистывании на определенный вид - PullRequest
0 голосов
/ 12 июня 2019

Я хочу сохранить функцию перелистывания в моем ViewPager, но хочу отключить ее, просто проводя пальцем по определенному View в файле макета (пользовательский Preference, который я расширяю):

activity.xml

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

activity.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
    }

}

Как этого добиться?

1 Ответ

0 голосов
/ 12 июня 2019

Вы можете использовать этот код для достижения своей цели.

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)

Надеюсь, это поможет. Спасибо

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...