android - own adapter for expandablelistview crash cannot cast hasmap to list -
i have onw adapter expandiblelistview, show parents fine when click in group see childs crash:
java.lang.classcastexception: java.util.hashmap cannot cast java.util.list
this own adapter:
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; } // method binds data views specified in 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 (int = 0; < 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; } } and constructor 2 methods populate data:
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; } i found example using adaptador , works not me..
solution :
/********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; } /*********************************************************************/
the classcastexception seems in following method:
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; }
the return type expected be:
list<? extends list<? extends map<string, ?>>>
whereas return variable resultado_hijo of type
arraylist<hashmap<string, ?> or ? extends list<? extends map<string, ?>>.
the outer list missing.
Comments
Post a Comment