0

我叫4个Asynctasks在MainActivity相同的URL(期望得到每个人的结果相同)RecyclerView适配器无效对象

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

我创作我的鲁塔对象请求的结果:

 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); 

创建对象后,我将它们添加到我的RecyclerView适配器中,并使用此方法调用MainActivity。

listRoutesAdapter.add(ruta); 

该方法的实现加入ListaRutasAdapter是这样的:

//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()); 
      } 
     } 
    } 
} 

在我的MainActivity i'm调用方法删除删除所有与某些类型的项目,在这种情况下“走” 。

listaRutasAdapter.deleteW("walking"); 

当我打电话异步任务的项目,我得到正确的4个项目中recyclerview得出:

enter image description here

但是,当我打电话从我的MainActivity的removeM方法只是将其从删除2我recyclerview。

在我尝试删除同一类型的所有对象之前,我得到了我的列表大小,并且它总是等于未删除的项目数。对于这些对象,if (modo.equals(modeN))中的比较始终是错误的。如果我记录“modo”的值,我什么也得不到。

注意:所有对象的类型,距离和时间都具有完全相同的值。不是一个错误或错误。

enter image description here

回答

0

改变你的代码如下

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

它的工作!但我仍然不明白这个逻辑,你能解释一下这个解决方案吗?谢谢 !!! – jckhan

相关问题