|
||
|
![]() |
![]() |
Programación y Desarrollo para Android Subforo exclusivo para temas de programación de software para PDAs y desarrollo de aplicaciones, interfaces, etc bajo Android |
![]() |
|
Herramientas |
#1
|
||||
|
||||
hashmap
buenas compañero , estoy trasteando con hashmap para crear unas listas y aprender de que va , ya que nunca lo había utilizado , al leer sobre ello no veo dificultad , pero en una practica sencilla como cargar una lista con hashmaps no consigo que función , siempre me sale en blanco , os dejo el codigo para ver si me sacáis de dudas
![]() MainActivity: Código:
public class MainActivity extends Activity { ListView lst; ListAdapter adp; static final String KEY_ID = "id"; static final String KEY_NAME = "Name"; static final String KEY_TLF = "TLF"; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); ArrayList<HashMap<String, String>> arr = new ArrayList<HashMap<String,String>>(); lst=(ListView)findViewById(R.id.listView1); for(int i=0; i < 100; i++){ HashMap<String,String> h = new HashMap<String,String>(); h.put(KEY_ID, String.valueOf(i)); h.put(KEY_NAME, String.valueOf("nombre"+i)); h.put(KEY_TLF, String.valueOf(i*123457)); arr.add(h); } adp = new ListAdapter(this,arr); //Log.d("count",String.valueOf(arr.size())); lst.setAdapter(adp); } Código:
public class ListAdapter extends BaseAdapter { ArrayList<HashMap<String,String>> arr; Context context; LayoutInflater inflater; public ListAdapter(Context con, ArrayList<HashMap<String,String>> mp){ this.context = con; this.arr = mp; this.inflater = (LayoutInflater)con.getSystemService(Context.LAYOUT_INFLATER_SERVICE); } @Override public int getCount() { // TODO Auto-generated method stub return arr.size(); } @Override public HashMap<String,String> getItem(int position) { // TODO Auto-generated method stub return arr.get(position); } @Override public long getItemId(int position) { // TODO Auto-generated method stub return position; } @Override public View getView(int position, View convertView, ViewGroup parent) { View vi = convertView; if(convertView == null) vi = inflater.inflate(R.layout.items, null); TextView name = (TextView)vi.findViewById(R.id.textView1); TextView tlf = (TextView)vi.findViewById(R.id.textView2); TextView id = (TextView)vi.findViewById(R.id.textView3); HashMap<String,String> cont = new HashMap<String,String>(); cont = arr.get(position); name.setText(cont.get(MainActivity.KEY_NAME)); tlf.setText(cont.get(MainActivity.KEY_TLF)); id.setText(cont.get(MainActivity.KEY_ID)); //Log.d("Name",cont.get(MainActivity.KEY_NAME)); return vi; } |
|
#2
|
||||
|
||||
Mira esta página
http://toolboxnet.blogspot.com.es/20...l#.UcFpH-cqybU para recorrerlo tienes que usar un iterator. Yo lo he utilizado en java en Android de momento no. |
#3
|
||||
|
||||
Bueno no consigo listar los maps , he añadido el iterator para recorrerlos pero me sigue quedando en blanco la lista , asi ha quedado el adapter:
Código:
public class ListAdapter extends BaseAdapter { ArrayList<HashMap<String,String>> arr; Context context; LayoutInflater inflater; public ListAdapter(Context con, ArrayList<HashMap<String,String>> mp){ this.context = con; this.arr = mp; this.inflater = (LayoutInflater)con.getSystemService(Context.LAYOUT_INFLATER_SERVICE); } @Override public int getCount() { // TODO Auto-generated method stub return arr.size(); } @Override public HashMap<String,String> getItem(int position) { // TODO Auto-generated method stub return arr.get(position); } @Override public long getItemId(int position) { // TODO Auto-generated method stub return position; } @Override public View getView(int position, View convertView, ViewGroup parent) { View vi = convertView; if(convertView == null) vi = inflater.inflate(R.layout.items, null); TextView name =(TextView)vi.findViewById(R.id.textView1); TextView tlf =(TextView)vi.findViewById(R.id.textView2); TextView id =(TextView)vi.findViewById(R.id.textView3); HashMap<String,String> cont = new HashMap<String,String>(); cont = arr.get(position); Iterator itr = cont.entrySet().iterator(); while (itr.hasNext()){ name.setText(cont.get(MainActivity.KEY_NAME)); tlf.setText(cont.get(MainActivity.KEY_TLF)); id.setText(cont.get(MainActivity.KEY_ID)); //Log.d("Name",cont.get(MainActivity.KEY_NAME)); } return vi; } } |
#4
|
||||
|
||||
Bueno al final me he dado cuenta que para usar hashmap no puedo usar customadapter solo lo he conseguido con el simple adapter y eso que lo he intentado XD , podéis cerrar este tema, gracias por la respuesta.
|
#5
|
||||
|
||||
creo que el error lo tienes en el while.
Iterator itr = cont.entrySet().iterator(); while (itr.hasNext()){ Map.Entry e = (Map.Entry)it.next(); name.setText(e.getKey()); tlf.setText(e.getValue()); id.setText(e.getKey()); //Log.d("Name",cont.get(e.getValue)); } aunque creo que es mas complejo aun, tu a un hasmap le pasas dos valores, uno de ellos debe ser un identificador , si quieres pasarle más debes hacer una clase y luego para extraer los valores hacer getters dentro de esa clase...yo lo veo bastante lio Última edición por Rockero_79 Día 20/06/13 a las 10:55:52. Razón: . |
#6
|
||||
|
||||
hola veo que es viejos el tema, pero si puedes usar customAdapter con hashmap.. ahora comparto el codigo que funciona. Saludos
public class ListViewAdapter extends BaseAdapter implements Filterable{ Context contexto; LayoutInflater inflater; ArrayList<HashMap<String,String>> datos; HashMap<String,String> map = new HashMap<String,String>(); public ListViewAdapter(Context a, ArrayList<HashMap<String,String>> array) { contexto=a; datos=array; originalData = array; temporyList = array; } @override public int getCount() { // TODO Auto-generated method stub return datos.size(); } @override public Object getItem(int position) { // TODO Auto-generated method stub return null; } @override public long getItemId(int position) { // TODO Auto-generated method stub return 0; } @override public View getView(int position, View convertView, ViewGroup parent) { TextView articulo; TextView id; View itemView; if(convertView==null){ inflater= (LayoutInflater) contexto.getSystemService(Context.LAYOUT_INFLATER_ SERVICE); itemView = inflater.inflate(R.layout.list_item, null);} else{ itemView=convertView;} map = datos.get(position); articulo = (TextView) itemView.findViewById(R.id.tarea); id = (TextView) itemView.findViewById(R.id.hora); articulo.setText(map.get("Desc_art").toString()); id.setText(map.get("cod_art").toString()); return itemView; } |