0

Ich rufe 4 Asynctasks auf die gleiche URL in MainActivity (erwartet die gleichen Ergebnisse eines jeden zu bekommen)RecyclerView Adapter Ungültigkeits Objekte

sendRequest(WALKING); 
sendRequest(WALKING); 
sendRequest(WALKING); 
sendRequest(WALKING); 

Mit dem Ergebnis der Anfragen, die ich mein Ruta-Objekt erstellen:

 Ruta ruta = new Ruta(); 
    ruta.distancia = new Distancia(jsonDistance.getString("text"), jsonDistance.getInt("value")); 
    ruta.duracion = new Duracion(jsonDuration.getString("text"), jsonDuration.getInt("value")); 
    ruta.endAddress = jsonLeg.getString("end_address"); 
    ruta.startAddress = jsonLeg.getString("start_address"); 
    ruta.startLocation = new LatLng(jsonStartLocation.getDouble("lat"), jsonStartLocation.getDouble("lng")); 
    ruta.endLocation = new LatLng(jsonEndLocation.getDouble("lat"), jsonEndLocation.getDouble("lng")); 
    ruta.points = decodePolyLine(overview_polylineJson.getString("points")); 
    ruta.tipo = mode; 
    ruta.json = data; 
    Log.d("objetofinal", ruta.tipo); 

Nach dem Erstellen der Objekte, füge ich sie in meinem RecyclerView Adapter mit dieser Methode, die ich MainActivity aufrufen.

listRoutesAdapter.add(ruta); 

Die Implementierung des Verfahrens in ListaRutasAdapter hinzufügen, ist dies:

//implementation 
public void add(Ruta route) { 
    listaRutas.add(route); 
    this.notifyDataSetChanged(); 
    Log.d("type_inserted", route.tipo); 
} 

//Resume of the adapter 

public List<Ruta> listaRutas; 

public ListaRutasAdapter(Context context, List<Ruta> listaRutas) { 
    this.listaRutas = listaRutas; 
    this.layoutInflater = LayoutInflater.from(context); 
    this.context = context; 
} 

public void deleteW(String modeN) { 
    if (listaRutas != null && !listaRutas.isEmpty()) { 
     Log.d("Size of the list", String.valueOf(getItemCount())); 
     for (int i = 0; i < listaRutas.size(); i++) { 
      String modo = listaRutas.get(i).tipo; 
      if (modo.equals(modeN)) { 
       listaRutas.remove(i); 
       this.notifyItemRemoved(i); 
       this.notifyItemRangeChanged(i, listaRutas.size()); 
      } 
     } 
    } 
} 

In meinem MainActivity Ich bin der Aufruf der Methode löschen Sie alle Elemente mit bestimmten Art zu entfernen, in diesem Fall „Gehen“ .

listaRutasAdapter.deleteW("walking"); 

Wenn ich die Asynchron-Aufgaben Artikel aufrufen bekomme ich richtig die 4 Elemente in der recyclerview gezogen:

enter image description here

Aber wenn ich die removeM Methode von meinem MainActivity nennen entfernt es nur 2 von meinem Recyclerview.

Bevor ich versuche, alle Objekte des gleichen Typs zu löschen, erhalte ich die Größe meiner Liste und sie ist immer gleich der Anzahl der Elemente, die nicht gelöscht wurden. Der Vergleich in if (modo.equals(modeN)) ist für diese Objekte immer falsch. Und wenn ich die Werte von "modo" logge, bekomme ich nichts.

Hinweis: Alle Objekte haben genau die gleichen Werte für Typ, Entfernung und Zeit. Ist kein Fehler oder Fehler.

enter image description here

Antwort

0

ändern Sie den Code wie unten

public void deleteW(String modeN) { 

       if (listaRutas != null && !listaRutas.isEmpty()) { 
        int i = 0; 
         while (i < listaRutas.size()) {  
         String modo = listaRutas.get(i).tipo; 
         if (modo.equals(modeN)) { 
          listaRutas.remove(i); 
          i--; 
         } 
          i++; 
        } 
        notifyDataSetChanged(); 
       } 
      } 
+0

Es hat funktioniert! Aber ich verstehe die Logik immer noch nicht, kannst du bitte die Lösung erklären? Vielen Dank !!! – jckhan

Verwandte Themen