Closed sadr0b0t closed 1 year ago
И вариант с сортировкой. чтобы элемент возвращался первым, нужно тоже как-то решить.
это можно, в sqlite на андроиде работает https://stackoverflow.com/questions/53713241/sql-order-by-specific-value-first-then-ordering
Где актуально:
Где без разницы:
Где не желательно:
меню "играть в плейлисте" на выбранном ролике в отсортированном/фильтрованном, т.к. в таком случае нарушится порядок сортировки. Для этого меню хороший вариант - загружать рекомендации с настройками сортировки/фильтра, а к выбранному ролику прокручивать список. Проблема здесь в том, что у него заранее неизвестен индекс в поисковой выдаче, но это решается ручным перебором. Мало вероятно, что ролик окажется в конце длинного списка, т.к. в таком случае пользователь должен был перемотать его вручную в гуе.
Реализовал через специальный запрос SQL - например:
@Query("SELECT * FROM video_item WHERE _id = :firstItemId OR (enabled AND NOT blacklisted) ORDER BY CASE WHEN _id = :firstItemId THEN 0 ELSE 1 END, RANDOM() LIMIT :lim")
List<VideoItem> recommendVideosWithFirstItem(int lim, long firstItemId);
Исправлено здесь https://github.com/sadr0b0t/yashlang/commit/3d024dd44d7ab39f641b1db13327315ae5c7b985 в этом тикете https://github.com/sadr0b0t/yashlang/issues/7
Так может быть нагляднее при навигации вперед/назад. Особенно в режиме плеера аудио.
В случае с ArrayAdapter решить легко. В случае с PagedListAdapter всё сложнее т.к. он берет данные из базы и подргужает их налету.
Варианты решения
Здесь обсуждают аналогичную проблему
How to delete/remove PagedListAdapter item #281 https://github.com/android/architecture-components-samples/issues/281
В целом, ответ, что так сделать нельзя, по крайней мере по-простому. Но какое-то решение вот здесь: https://gist.github.com/guness/df12d8cc4f595af1395f4a1f5bca5f00
how to add item to paged list https://stackoverflow.com/questions/58852522/how-to-add-item-to-paged-list