Привет, я новичок в программировании, и моя проблема заключается в том, когда я переключаю вкладки на мою навигацию. Мои данные дублируются при повторной загрузке.
httpClient.get(url, object : JsonHttpResponseHandler() { override fun onSuccess(statusCode: Int, headers: Array<out Header>, response: JSONArray) { for (i in 0 until response.length()) { val seminar = Seminar.fromJson(response.getJSONObject(i)) seminarsAdapter.add(SeminarItem(seminar)) } } override fun onFailure(statusCode: Int, headers: Array<out Header>?, responseString: String?, throwable: Throwable?) { Log.d("Seminars Fragment", throwable?.localizedMessage) } })
Вы можете очистить список перед добавлением новых элементов, но в случае, если вы захотите добавить их по одному или что-то еще из логики в будущем, я предлагаю вам добавить DiffUtil
внутри Adapter
для управления содержимым вашего Adapter
DiffUtil – это класс утилиты, который может вычислять разницу между двумя списками и выводить список операций обновления, который преобразует первый список во второй. Он может использоваться для расчета обновлений для адаптера RecyclerView.
Посмотрите на этот пост, в котором объясняется, как реализовать его вместе с Adapter
и RecyclerView
Если у seminarsAdapter
уже есть некоторые данные, вы добавите к существующему набору данных.
Возможно, добавьте clear
метод для своих seminarsAdapter
типа и вызовите его раньше в onSuccess(...)
.
httpClient.get(url, object : JsonHttpResponseHandler() { override fun onSuccess(statusCode: Int, headers: Array<out Header>, response: JSONArray) { if(seminarsAdapter.size()>0){ seminarsAdapter.clear(); } for (i in 0 until response.length()) { val seminar = Seminar.fromJson(response.getJSONObject(i)) seminarsAdapter.add(SeminarItem(seminar)) } } override fun onFailure(statusCode: Int, headers: Array<out Header>?, responseString: String?, throwable: Throwable?) { Log.d("Seminars Fragment", throwable?.localizedMessage) } })
clear семинарыАдаптивный список в ответе вызова api, чтобы данные не повторялись. попробуйте код выше