2012-06-05 32 views
0

我有我的ONW適配器一個expandiblelistview,這表明父母很好,但是當我在一組點擊查看孩子的它崩潰:自己的適配器expandablelistview崩潰無法施展hasmap列出

java.lang.ClassCastException: java.util.HashMap cannot be cast to java.util.List

這是我自己的適配器:

public class adaptadorLista extends SimpleExpandableListAdapter { 

    private Context mContext; 
     private List<? extends List<? extends Map<String, ?>>> mChildData; 
     private List<? extends Map<String, ?>> mParentData; 
     private String[] mChildFrom; 
     private int[] mChildTo; 


     public adaptadorLista(Context contexto, 
      List<? extends Map<String, ?>> creaListaDeGrupos, 
      int lineaPadre, 
      String[] strings, 
      int[] is, 
      List<? extends List<? extends Map<String, ?>>> creaListadeHijos, 
      int lineaHija, 
      String[] strings2, 
      int[] is2) { 

      super(contexto, creaListaDeGrupos, lineaPadre, strings, is, 
        creaListadeHijos, lineaHija, strings2, is2); 

      mContext = contexto; 
      mChildData = creaListadeHijos; 
      mChildFrom = strings2; 
      mChildTo = is2;    
    } 

     @Override 
     public long getChildId(int groupPosition, int childPosition) { 
     return 0; 
     } 
     public View getChildView(int groupPosition, int childPosition,boolean isLastChild, View convertView, ViewGroup parent) { 

     View v; 
     if (convertView == null) { 
       v = newChildView(isLastChild, parent); 
     } else { 
       v = convertView; 
     } 
     bindView(v, mChildData.get(groupPosition).get(childPosition), mChildFrom, mChildTo, groupPosition, childPosition); 
     return v; 
} 
     // This method binds my data to the Views specified in the child xml 
         private void bindView(View view, Map<String, ?> data,String[] from, int[] to, int groupPosition, int childPosition) { 
           int len = to.length - 1; 
           // Apply TextViews 
           for (int i = 0; i < len; i++) { 
             TextView v = (TextView) view.findViewById(to[i]); 
             if (v != null) { 
               v.setText((String) data.get(from[i])); 
              } 
             }      
           } 

     @Override 
     public boolean isChildSelectable(int groupPosition, int childPosition) { 
     return true; 
     }      
} 

和2種方法填充數據的構造:

adaptadorLista expListAdapter = new adaptadorLista(
         contexto, 
         creaListaDeGrupos(), 
         R.layout.linea_padre, 
         new String[] { "numero_servicio","profesion","direccion","fecha_cad" }, 
         new int[] { R.id.tvServicio,R.id.tvProfesion,R.id.tvDireccion,R.id.tvfecha},   
         creaListadeHijos(), 
         R.layout.linea_hija,  
         new String[] { "tipo", "diasEnCurso","estado","fechaProCita" }, 
         new int[] {R.id.tvTipo , R.id.tvDiasEnCurso, R.id.tvEstado,R.id.tvFechaProximaCita} 
         ); 

       setListAdapter(expListAdapter); 
registerForContextMenu(getExpandableListView());      
    } 

       private List<? extends List<? extends Map<String, ?>>> creaListadeHijos() { 
        ArrayList resultado_hijo = new ArrayList(); 
        for(int i=0;i<ArrayServicios.size();i++){ 
         HashMap hijo = new HashMap(); 
         hijo.put("tipo", tipos.get(i)); 
         hijo.put("diasEnCurso", diasEnCurso.get(i)); 
         hijo.put("estado", estados.get(i)); 
         hijo.put("fechaProCita", fechasProximasCitas.get(i)); 


         resultado_hijo.add(hijo); 
        } 

        return (List)resultado_hijo; } 

       @SuppressWarnings({ "unchecked", "rawtypes" }) 
       private List<? extends Map<String, ?>> creaListaDeGrupos() { 


        ArrayList resultado_padre = new ArrayList(); 
        for(int i=0;i<ArrayServicios.size();i++){ 
         HashMap padre = new HashMap(); 
         padre.put("numero_servicio", numerosServicios.get(i)); 
         padre.put("profesion", profesiones.get(i)); 
         padre.put("direccion", direcciones.get(i)); 
         padre.put("fecha_cad", fechasCaduca.get(i)); 

         resultado_padre.add(padre); 
        } 

        return (List)resultado_padre; 
       } 

我發現使用這個adaptador和作品,但一個例子不是我..

解決方案:

/********Metodo que rellena la lista de hijos*********************/ 
private List<? extends List<? extends Map<String, ?>>> creaListadeHijos() { 
       List<List<Map<String, String>>> resultado_hijo = new ArrayList<List<Map<String, String>>>(); 

       for(int i=0;i<ArrayServicios.size();i++){ 
        List<Map<String, String>> hijo = new ArrayList<Map<String,String>>(); 
        Map<String, String> curChildMap = new HashMap<String, String>(); 
        curChildMap.put("tipo", tipos.get(i)); 
        curChildMap.put("diasEnCurso", diasEnCurso.get(i)); 
        curChildMap.put("estado", estados.get(i)); 
        curChildMap.put("fechaProCita", fechasProximasCitas.get(i)); 
        hijo.add(curChildMap);      
       resultado_hijo.add(hijo); 
      } 

      return resultado_hijo; 
      } 
/*********************************************************************/ 

回答

1

ClassCastException似乎是在下面的方法:

private List<? extends List<? extends Map<String, ?>>> creaListadeHijos() { 
    ArrayList resultado_hijo = new ArrayList(); 
    for(int i=0;i<ArrayServicios.size();i++){ 
     HashMap hijo = new HashMap(); 
     hijo.put("tipo", tipos.get(i)); 
     hijo.put("diasEnCurso", diasEnCurso.get(i)); 
     hijo.put("estado", estados.get(i)); 
     hijo.put("fechaProCita", fechasProximasCitas.get(i)); 


     resultado_hijo.add(hijo); 
    } 

    return (List)resultado_hijo;  

}

返回類型預計爲:

List<? extends List<? extends Map<String, ?>>>

,而你的回報變量resultado_hijo的類型

ArrayList<HashMap<String, ?>? extends List<? extends Map<String, ?>>的。

缺失外部List

相關問題