我有一个expandiblelistview
的onw适配器,它显示父母很好但是当我点击一个组来查看孩子崩溃时:
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;
}
}
构造函数有两种填充数据的方法:
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;
}
我找到了一个使用这个adapador的例子,但不适合我......
解决方案:
/********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;
}
/*********************************************************************/
答案 0 :(得分: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
。