Ответ 1
SCROLL_STATE_FLING
: больше не является частью RecyclerView
как это не упоминается в документации здесь
Относительно вашего требования:
RecyclerView находится внутри android.view.ViewGroup
и в соответствии с его исходным кодом extends ViewGroup
документацию extends ViewGroup
здесь.
Прокрутка в RecyclerView является своего рода разделением между RecyclerView и LinearLayoutManager. Есть два случая, которые необходимо обработать:
- Пользователь бросает взгляд. Поведение по умолчанию состоит в том, что RecyclerView передает сброс внутреннему Scroller, который затем выполняет магию прокрутки. Это проблематично, потому что тогда RecyclerView обычно располагается в неприкрепленном положении. Решите это путем переопределения реализации fling
fling()
в RecyclerView и вместо того,flinging
,smoothscroll
LinearLayoutManager
в позицию. - Пользователь поднимает палец с недостаточной скоростью, чтобы запустить прокрутку. В этом случае не происходит сброса. Если вы хотите обнаружить этот случай в том случае, если представление не находится в привязанном положении, вы можете сделать это, переопределив метод
onTouchEvent
.
Смотрите здесь для подробной прокрутки Snappy в RecyclerView
Несколько подсказок ViewPager
, которые стоит упомянуть, поскольку RecyclerView
является его дочерним элементом:
-
Подумайте об изменении количества страниц, которые кэшируются. Это особенно важно, когда у вас есть только 3 или 4 страницы. Настройка по умолчанию сохранит 1 страницу с каждой стороны текущей страницы. В случае, если у вас есть 3 страницы, переход к средней странице будет означать, что все ваши страницы будут кэшированы. Затем переход к первой или последней странице приведет к удалению одной из страниц из памяти, и ее необходимо будет заново создать и добавить снова, когда вы проведете снова. Установив
setOffscreenPageLimit(2)
вы позволите всем своим страницам постоянно оставаться в памяти. Это компромисс между производительностью и соображениями памяти, поэтому рекомендуется выслушивать предупреждения о нехватке памяти и быть готовыми к удалению пограничных страниц, если это необходимо. -
Если вы пытаетесь заменить Views в ViewPager, недостаточно просто изменить набор данных за адаптером и вызвать
notifyDataSetChanged()
. Вам также необходимо убедиться, что вы правильно реализовалиgetItemPosition(Object object)
и вернутьPOSITION_NONE
для элементов, которые изменились, и вернутьPOSITION_UNCHANGED
или фактическую позицию для элементов, которые не изменились. -
Другой API, который был добавлен, это
setPageMargin()
иsetPageMarginDrawable()
, что позволяет вам легко разделять ваши страницы.
Смотрите здесь для подробного просмотра горизонтальных представлений с помощью ViewPager, Обновлено
Разница между перетаскиванием и броском
Для функции перетаскивания Вы можете использовать некоторые из сопутствующих классов RecyclerView's
:
-
ItemTouchHelper, который представляет собой служебный класс для добавления свайпа, чтобы отклонить и перетащить поддержку в RecyclerView.
-
его ItemTouchHelper.Callback, который является контрактом между ItemTouchHelper и вашим приложением
За броском видно