PDA

Ver la Versión Completa : hashmap


rafaxplayer
19/06/13, 06:48:53
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 :oh:

MainActivity:

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

}

Y listadapter class:

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.LAYOU T_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;

}

Rockero_79
19/06/13, 10:18:53
Mira esta página

http://toolboxnet.blogspot.com.es/2010/02/hashmap-ejemplo-de-clases-implementadas.html#.UcFpH-cqybU

para recorrerlo tienes que usar un iterator.

Yo lo he utilizado en java en Android de momento no.

rafaxplayer
19/06/13, 15:49:26
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:

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.LAYOU T_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;
}



}

rafaxplayer
20/06/13, 07:55:51
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.

Rockero_79
20/06/13, 10:55:16
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

Gonzalo.gerezm
08/04/15, 15:12:52
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;
}