Передача id записи БД из recyclerview в другой фрагмент
Знаю, что с локальной базой это легко делается с помощью simplecursoradapter. Но проблема в том, что в recyclerview я парсю json данные (поля "id" и "name") из БД на сервере. И при клике на определенный view списка отправляется новый запрос по выбранному id на сервер, с которого и приходит вся информация. Подскажите, как назначить view списка именно тот id который соответствует записи в БД на сервере? Если есть другие варианты решения данной задачи - с радостью почитаю.
Ответы (1 шт):
Ваша проблема в первую очередь в том, что вы вообще что-либо парсите в RecylcerView. Recycler это View а View вообще ничего не должна знать о каких-то тамб базах, парсингах и прочих сущностях. Все что должен делать Recycler это рисовать список с готового списка данных. Т.е. данные для RecyclerView должны подготавливаться где-то в другом месте (Presenter, ViewModel и т.д.).
Из этого следует вывод, что ваш флоу должен быть примерно таким:
- Presenter (ViewModel) должны подготовить для Recycler-a список объектов в которых в идеале должны быть ТОЛЬКО те поля которые необходимы для того, чтоб корректно пробиндить ViewHolder. Что вы можете сделать? Вы можете создать для этого UI модель в которой будет данные для отображения пользователя + ваш ID который вам нужен. И подготовить список этих объектов для Recycler-a.
- RecyclerView просто рисует модели и хранит в себе ItemClickListener, интерфейс который реализует ваше Activity/Fragment/View. Сам Recycler хранит список этих UI моделек.
- При клике на элемент вы передаете эту самую модельку в ClickListener (там есть ваш ID). Это все попадает в Activity/Fragment/View, а та в свою очередь дергает метод презентера в который кладет ваш ID или всю модель (в зависимости от потребностей). И вот уже сам презентер начинает там что-то парсить и куда-то отправлять.