#android #kotlin #android-recyclerview
Вопрос:
У меня есть список элементов в a RecyclerView
, который был извлечен из Firestore
базы данных. Всякий раз, когда я добавляю, удаляю или редактирую элемент, я вызываю соответствующую функцию для внесения изменений в Firestore
него, а затем вызываю getProductListFromFireStore()
ее для обновления RecyclerView
. Но проблема, с которой я сталкиваюсь, заключается в том, что каждый раз, когда я вношу эти изменения, я попадаю в начало списка. Я хочу оставаться там, где был, даже после добавления/удаления или редактирования. Как я могу это сделать?
Раньше notifyDataSetChanged()
в моем коде этого не было, это было добавлено, чтобы проверить, справится ли это с работой, я не знаю, правильно ли я это сделал.
Следующая функция вызывается, когда список продуктов успешно извлечен из Firestore
fun successProductsListFromFireStore(productsList: ArrayListlt;Productgt;) { hideProgressDialog() if (productsList.size gt; 0) { binding.rvMyProductItems.layoutManager = LinearLayoutManager(activity) binding.rvMyProductItems.setHasFixedSize(true) val adapterProducts = MyProductsListAdapter(requireActivity(), productsList, this@ProductsFragment) binding.rvMyProductItems.adapter = adapterProducts adapterProducts.notifyDataSetChanged() } else { binding.rvMyProductItems.visibility = View.GONE binding.tvNoProductsFound.visibility = View.VISIBLE } }
Ответ №1:
Я думаю, вам нужно использовать диффузию. Он автоматически обновляет только измененные элементы, и если хотя бы один элемент на экране не был изменен, то u останется на том же месте