Как отключить смахивание в ViewPager2? - PullRequest
0 голосов
/ 04 марта 2019

Возможно ли включить-отключить смахивание в новом андроиде viewpager2 компонент?

Ответы [ 2 ]

0 голосов
/ 16 марта 2019

Теперь возможно включить-отключить смахивание viewpager2 с помощью Version 1.0.0-alpha02

Использовать implementation 'androidx.viewpager2:viewpager2:1.0.0-alpha02'

Версия 1.0.0-alpha02

Новые функции

  • Возможность отключить пользовательский ввод (setUserInputEnabled, isUserInputEnabled)

Изменения API

  • ViewPager2 окончательный класс

Исправления ошибок

  • FragmentStateAdapter исправления стабильности

ОБРАЗЕЦ КОДА для отключения считывания в viewpager2

myViewPager2.setUserInputEnabled(false);

ОБРАЗЕЦ КОДАвключить свайп в viewpager2

myViewPager2.setUserInputEnabled(true);
0 голосов
/ 06 марта 2019

Под капотом ViewPager2 работает с RecyclerView для надувания фрагментов, но RecyclerView скрыто, что делает его более идиотским.

 val rv : RecyclerView = viewPager.getChildAt(0) as RecyclerView
 rv.layoutManager = NonScrollingLayoutManager( rv.context, rv.layoutManager as LinearLayoutManager)

Хакерский способ - перевести ребенка в нулевую позицию, которая является RecyclerView, и отключить прокрутку в менеджере раскладок, добавив менеджер раскладок:

inner class NonScrollingLayoutManager(context: Context, val layoutManager: LinearLayoutManager) :
    LinearLayoutManager(context, layoutManager.orientation, layoutManager.reverseLayout) {

    override fun canScrollVertically(): Boolean  = layoutManager.orientation == HORIZONTAL


    override fun canScrollHorizontally(): Boolean  =  layoutManager.orientation == VERTICAL

}

Пожалуйста, будьте осторожнычто если API изменит менеджер размещения, используемый для RecyclerView, то есть они отойдут от LinearLayoutManager, это не сработает, и ему потребуется переопределить некоторые методы и обеспечить вызов супер-методов.

Вторым подходом является подкласс ViewPager2, который равен ViewGroup, и затем выполняется волшебство при перехвате событий касания, прежде чем они будут отправлены дочерним представлениям (как вы могли бы догадаться RecyclerView) и будьте осторожны.не предотвращать щелчки.

...