Ich bin nicht in der Lage, die funktionierende Lösung für dieses Problem zu finden, und ich weiß nicht, wie das Problem richtig zu formulieren. Ich verwende OpenWeather API, um Prognosen für die nächsten sieben Tage zu bekommen eine separate Klasse für alle netzwerkbezogenen Arbeiten und Speichern des Ergebnisses in der sqlite-Datenbank und anschließendes Anhängen der Ergebniszeichenfolge an die Recycleransicht. Ich habe Retrofit verwendet, um meine HTTP-API in eine Java-Schnittstelle umzuwandeln. Ich habe den Recycleransichtsadapter an diese Klasse übergeben Konstruktor von meinem MainFragment class.I ist in der Lage, korrekt Daten aus der api zu erhalten, aber der folgende Code funktioniert nicht richtigRecyclerView Adapter nicht in der Lage, alle Elemente zu löschen
@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();
}
}
Diese Funktion asynchron in retrofit.The f aufgerufen wird oder Schleife, die zum Entfernen von Elementen in mForecastAdapter verwendet wird, läuft nicht vollständig, die die Liste verursacht das doppelte Element
Heres das Entfernen enthalten und fügen Funktion i verwendet Recycler anzeigen Adapter
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);
}
Es folgt die Log Eintrag, dass die for-Schleife ist i zeigt zum Löschen des mForecastAdapter bin mit nicht vollständig
läuft Wenn App
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
beginnt
Wenn ich die App erstmals
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
aktualisieren Wenn ich
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
Ich bin nicht in der Lage zu verstehen, warum die Schleife die App für zweites Mal
frischt für zum Entfernen von Element verwendet wird, nicht richtig funktioniert .Thanks in fortgeschrittenenLösung: -
int count = mForecastAdapter.getItemCount()
for(int i=0;i<count;i++){
mForecastAdapter.remove(i);
}
Oder ich kann in der remove()
public void remove() {
mDataset.clear();
notifyItemRemoved(position);
}
können Sie versuchen, statt notifyItemRemoved notifyDataSetChanged bitte? – Swag
Wie wäre es mit 'int i = mForecastAdapter.getItemCount() - 1; i> = 0; i -' beim Entfernen von Daten. Oder rufe einfach alle Gegenstände ab. – LordRaydenMK
Das scheint seltsam, aber mehr von dem Code, den Sie geschrieben haben, wird benötigt, um das Problem zu finden, vielleicht können Sie einfach versuchen, "clear" zu verwenden, um das Array zu leeren und einfach Ihre add-Funktion verwenden und den Aufruf notifydatasetchanged wenn getan?Oder versuchen Sie zu debuggen, ob das Element tatsächlich gelöscht wird. – Roee