Как выбрать первый элемент без долгого нажатия, используя RecyclerView's SelectionTracker - PullRequest
4 голосов
/ 03 апреля 2019

Я создаю приложение, которое позволит пользователям выбирать из списка RecyclerView, выделяя их выбор. Проблема в том, что для того, чтобы выделить элемент в первый раз, необходимо долгое нажатие. (После этого достаточно сделать короткий щелчок мышью).

Я не нашел ничего в документации, чтобы указать, почему это происходит.

Я использую SelectionTracker

Специально следуя этому руководству

Вот код : https://github.com/marcosholgado/multiselection

Ожидания: Я ожидаю, что элемент в RecyclerView будет выбираться каждый раз, когда кто-то нажимает на него.

Reality: Чтобы выбрать элемент в первый раз, пользователь должен долго нажимать на него.

Есть идеи?

1 Ответ

2 голосов
/ 27 апреля 2019

Несмотря на то, что я не мог придумать решение, которое не предполагает повторной реализации MotionInputHandler и SelectionTracker.Builder (как упомянуто в руководстве), есть хитрый прием для достижения желаемого поведения.

Мы знаем, что TouchInputHandler выбирает элементы одним щелчком мыши, пока SelectionTracker не пусто. Это означает, что если у нас есть специальный ключ, сохраненный в SelectoinTracker, который не связан с реальным элементом списка, мы практически «активируем» режим выбора одним щелчком мыши таким образом. Однако мы также должны убедиться, что наш KeyProvider не предоставляет тот же специальный ключ для обеспечения согласованности наших данных.

Итак, если вы выбрали специальную клавишу, скажем, ghostKey, для активации и деактивации режима выбора теперь нужно вызвать mSelectionTracker.select(ghostkey) или mSelectionTracker.clearSelection(). Затем вы можете выполнять эти вызовы так, как вам нравится, будь то наличие кнопки, которая активирует и деактивирует режим выбора, или просто вызов этого в процессе создания представления хостинга, т.е. onCreate, onCreateView и т. Д.

Если вы используете Kotlin, вы также можете определить некоторые расширения, которые обернутые для вас эти вызовы, так что вы сможете делать такие вещи, как mSelectionTracker.enable() или mSelectionTracker.disable()

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