Я не могу найти рабочее решение для этой проблемы, и я не знаю, как правильно формулировать проблему. Я использую API OpenWeather для получения прогноза на следующие семь дней. Я определил отдельный класс для всей работы, связанной с сетью, и сохранение результата в базе данных sqlite, а затем прикрепление результирующей строки к просмотру recycler. Я использовал модификацию для превращения моего HTTP API в интерфейс Java. Я передал адаптер вида recycler в этот класс конструктор из моего MainFragment class.I может правильно получить данные из API, но следующий код не работает должным образомАдаптер RecyclerView не может удалить все элементы
@Override
public void onResponse(Call<OpenWeather> call, Response<OpenWeather> response) {
int code = response.code();
if (code == 200) {
OpenWeather openWeather = response.body();
String []result = getWeatherDataFromRetrofit(openWeather,postal);
if (mForecastAdapter != null) {
Log.e(LOG_TAG,""+mForecastAdapter.getItemCount());
for(int i=0;i<mForecastAdapter.getItemCount();i++){
mForecastAdapter.remove(i);
}
for(int i=0;i<result.length;i++) {
String dayForecastStr = result[i];
mForecastAdapter.add(i,dayForecastStr);
}
// New data is back from the server. Hooray!
}
} else {
Toast.makeText(mContext, "Did not work: " + String.valueOf(code), Toast.LENGTH_LONG).show();
}
}
Эта функция называется асинхронна в retrofit.The е или петля, которая используется для удаления элементов в mForecastAdapter не работает полностью, которая вызывает список, чтобы содержать дубликат
Heres в удалить и добавить функцию я использовал Ресайклер Посмотреть адаптер
public void add(int position, String item) {
mDataset.add(position, item);
Log.e("Add element:", item);
notifyItemInserted(position);
}
public void remove(int position) {
Log.e("Remove element:",mDataset.get(position));
mDataset.remove(position);
notifyItemRemoved(position);
}
Ниже Записывать запись, которая показывает, что цикл я использую для очистки mForecastAdapter не работает полностью
Когда приложение начинает
E/FetchWeatherTask: 0
E/Add element:: Sun, Jul 10 - Rain - 35/27
E/Add element:: Mon, Jul 11 - Rain - 32/27
E/Add element:: Tue, Jul 12 - Rain - 32/27
E/Add element:: Wed, Jul 13 - Rain - 35/27
E/Add element:: Thu, Jul 14 - Rain - 32/26
E/Add element:: Fri, Jul 15 - Rain - 33/27
E/Add element:: Sat, Jul 16 - Rain - 32/27
Когда я обновить приложение для впервые
E/FetchWeatherTask: 7
E/Remove element:: Sun, Jul 10 - Rain - 35/27
E/Remove element:: Tue, Jul 12 - Rain - 32/27
E/Remove element:: Thu, Jul 14 - Rain - 32/26
E/Remove element:: Sat, Jul 16 - Rain - 32/27
E/Add element:: Sun, Jul 10 - Rain - 35/27
E/Add element:: Mon, Jul 11 - Rain - 32/27
E/Add element:: Tue, Jul 12 - Rain - 32/27
E/Add element:: Wed, Jul 13 - Rain - 35/27
E/Add element:: Thu, Jul 14 - Rain - 32/26
E/Add element:: Fri, Jul 15 - Rain - 33/27
E/Add element:: Sat, Jul 16 - Rain - 32/27
Когда я освежил приложение для второго раза
E/FetchWeatherTask: 10
E/Remove element:: Sun, Jul 10 - Rain - 35/27
E/Remove element:: Tue, Jul 12 - Rain - 32/27
E/Remove element:: Thu, Jul 14 - Rain - 32/26
E/Remove element:: Sat, Jul 16 - Rain - 32/27
E/Remove element:: Wed, Jul 13 - Rain - 35/27
E/Add element:: Sun, Jul 10 - Rain - 35/27
E/Add element:: Mon, Jul 11 - Rain - 32/27
E/Add element:: Tue, Jul 12 - Rain - 32/27
E/Add element:: Wed, Jul 13 - Rain - 35/27
E/Add element:: Thu, Jul 14 - Rain - 32/26
E/Add element:: Fri, Jul 15 - Rain - 33/27
E/Add element:: Sat, Jul 16 - Rain - 32/27
Я не может понять, почему цикл используется для удаления элемента не работает правильно .THANKS в передовых
Решение: -
int count = mForecastAdapter.getItemCount()
for(int i=0;i<count;i++){
mForecastAdapter.remove(i);
}
Или я могу очистить список в один присест в отдалении()
public void remove() {
mDataset.clear();
notifyItemRemoved(position);
}
Вы можете попробовать notifyDataSetChanged вместо notifyItemRemoved пожалуйста? – Swag
как насчет 'int i = mForecastAdapter.getItemCount() - 1; i> = 0; i -' при удалении данных. Или просто вызовите очистить все элементы. – LordRaydenMK
Thats seem weird, но больше кода, который вы написали, необходимо найти проблему, возможно, вы можете просто попробовать «очистить», чтобы очистить массив, и просто использовать функцию добавления, а call notifydatas выбрано, когда это будет сделано?или попробуйте отладить, если элемент действительно удаляется в первую очередь. – Roee