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