Listview con arraylist, adaptador simple en android

Intento mostrar algo en listview usando arraylist y adaptador simple. Intenté algo como a continuación, pero en mi resultado muestra los apellidos del arraylist. ¿Cuál es mi error no puedo entender.

final ListView listView = (ListView) findViewById(R.id.mylist); ArrayList<HashMap<String, String>> list_of_bookmarks = new ArrayList<HashMap<String, String>>(); HashMap<String, String> b = new HashMap<String, String>(); String[] from = { "php_key","c_key","android_key","hacking_key" }; String[] name_of_bookmarks = { "php","c","android","hacking" }; for(int i=0;i<4;i++) { b.put(from[i],name_of_bookmarks[i]); list_of_bookmarks.add(b); } }; int[] to = { R.id.txt1,R.id.txt1,R.id.txt1,R.id.txt1}; SimpleAdapter adapter = new SimpleAdapter(getBaseContext(), list_of_bookmarks, R.layout.list_layout, from, to); listView.setAdapter(adapter); 

Sólo quiero mostrar "php", "c", "android", "hacking" en un listview. Y lo que debe ser una manera más eficiente de hacer that.I son un principiante por lo que puede sugerir una mejor manera que debo seguir

Main.xml

 <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="fill_parent" android:layout_height="60dp" > <ListView android:id="@+id/zone_list" android:layout_marginBottom="70dp" android:background="@drawable/batteryborder" android:layout_width="match_parent" android:layout_height="wrap_content" > </ListView> </LinearLayout> 

Setlanguage.xml

 <?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="fill_parent" android:layout_height="60dp"> <TextView android:id="@+id/tvName" android:layout_width="fill_parent" android:layout_height="fill_parent" android:textSize="18dp" android:gravity="center_vertical" /> </LinearLayout> 

Agrega en onCreate () de tu archivo de actividad

 ListView listView; String[] from = { "php_key","c_key","android_key","hacking_key" }; ArrayAdapter arrayAdapter; listView = (ListView) findViewById(R.id.zone_list); arrayAdapter = new ArrayAdapter(this,R.layout.setlanguage, R.id.tvName, from); listView.setAdapter(arrayAdapter); 

Mi consejo para usted sería crear una clase separada que extienda el adaptador (o alguna subclase de él)

A continuación se muestra un ejemplo sencillo de un adaptador de matriz de cadenas.

 package ro.gebs.captoom.adapters; import android.content.Context; import android.view.View; import android.view.ViewGroup; import antistatic.spinnerwheel.adapters.AbstractWheelTextAdapter; import com.example.captoom.R; public class LanguagesAdapter extends AbstractWheelTextAdapter { // Countries names private String languages[]; public LanguagesAdapter(Context context) { super(context, R.layout.lang_item, NO_RESOURCE); languages = context.getResources().getStringArray(R.array.lang_array); setItemTextResource(R.id.language_txt); } @Override public View getItem(int index, View cachedView, ViewGroup parent) { View view = super.getItem(index, cachedView, parent); return view; } @Override public int getItemsCount() { return languages.length; } @Override protected CharSequence getItemText(int index) { return languages[index]; } } 

Y el uso es simple, simplemente use el método .setAdapter();

O otro ejemplo que utiliza un arrayAdapter:

 package apc.example; import java.util.ArrayList; import utils.BitmapManager; import android.app.Activity; import android.content.Context; import android.graphics.Bitmap; import android.graphics.BitmapFactory; import android.view.LayoutInflater; import android.view.View; import android.view.ViewGroup; import android.widget.ArrayAdapter; import android.widget.ImageView; import android.widget.TextView; public class PersonAdapter extends ArrayAdapter<Person> { Context context; int layoutResourceId; ArrayList<Person> data = null; public PersonAdapter(Context context, int layoutResourceId, ArrayList<Person> data) { super(context, layoutResourceId, data); this.layoutResourceId = layoutResourceId; this.context = context; this.data = data; } @Override public View getView(int position, View convertView, ViewGroup parent) { View row = convertView; ItemHolder holder = null; if (row == null) { LayoutInflater inflater = ((Activity) context).getLayoutInflater(); row = inflater.inflate(layoutResourceId, parent, false); holder = new ItemHolder(); holder.imgIcon = (ImageView) row.findViewById(R.id.icon); holder.txtName = (TextView) row.findViewById(R.id.title); holder.txtDescription = (TextView) row.findViewById(R.id.desc); row.setTag(holder); } else { holder = (ItemHolder) row.getTag(); } Person bean = data.get(position); holder.txtName.setText(bean.getName()); holder.txtDescription.setText(bean.getDescription()); Bitmap b = BitmapFactory.decodeResource(context.getResources(), R.drawable.user); BitmapManager.INSTANCE.setPlaceholder(b); BitmapManager.INSTANCE.loadBitmap(bean.getUrl(), holder.imgIcon, 80, 80); return row; } public static class ItemHolder { public ImageView imgIcon; TextView txtName; TextView txtDescription; } public void updateAdapter(ArrayList<Person> pers){ this.data = pers; } } 

Este es un ejemplo de un adaptador para una clase más compleja que tiene más campos en lugar de una cadena simple. Pero eso se puede modificar fácilmente a ArrayAdapter<String> y luego ir desde allí.

De todos modos creo que siempre es una buena práctica escribir sus adaptadores personalizados para listviews.

¡Espero que esto ayude!

Estás reutilizando la misma vista en tu objeto int [].

int[] to = { R.id.txt1,R.id.txt1,R.id.txt1,R.id.txt1};

Parece que está tratando a todos como el mismo objeto, por lo que cada vez que agrega un nuevo elemento cambia los anteriores.

Para utilizar SimpleAdapter necesitará definir cada vista en el XML con diferentes IDs.

int[] to = { R.id.txt1,R.id.txt2,R.id.txt3,R.id.txt4};

SimpleAdapter puede ser más simple en lo que respecta a su complejidad interna, pero definitivamente no es más fácil de usar. Con un ArrayAdapter sólo puede pasar la lista de elementos y dejar que genere vistas automáticamente. Puede ser de cualquier tamaño que lo necesite, siempre y cuando no se quede sin memoria. (Ver abajo por ejemplo)

Una vez que empiece a trabajar con adaptadores personalizados, le recomiendo que vea la charla de E / S de Romain Guy y Adam Powell . Es todo un montón de tomar en el aprendizaje, pero hacen un gran trabajo de explicar cómo funciona ListViews .

 //List of Items String[] name_of_bookmarks = { "php","c","android","hacking" }; //Create your List object for the ArrayAdapter //and make it the same size as name_of_books List<String> listBookmarks = new ArrayList<String>(Array.getLength(name_of_bookmarks)); //Add name_of_bookmarks contents to listBookmarks Collections.addAll(listBookmarks, name_of_books); //Create an ArrayAdapter passing it the Context, a generic list item and your list //An alternative to "this" would be "getApplicationContext()" from your main activity //or "getActivity()" from a fragment. "getBaseContext()" is not recommended. ArrayAdapter arrayAdapter = new ArrayAdapter(this, R.layout.list_item_text, listBookmarks); //Set the adapter to your ListView final ListView listView = (ListView) findViewById(R.id.mylist); listView.setAdapter(arrayAdapter); 

Prueba éste

  public class MyFragment extends ListFragment{ String[] from = { "php_key","c_key","android_key","hacking_key" }; String[] name_of_bookmarks = { "php","c","android","hacking" }; @Override public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { List<HashMap<String, String>> list= new ArrayList<HashMap<String,String>>(); for (int i = 0; i < name_of_bookmarks.length; i++) { HashMap<String, String> map= new HashMap<String, String>(); map.put("key", name_of_bookmarks[i]); list.add(map); } String[] from = { "key" }; int[] to = { R.id.txt}; SimpleAdapter adapter = new SimpleAdapter(getActivity().getBaseContext(), list, R.layout.list_layout, from, to); setListAdapter(adapter); return super.onCreateView(inflater, container, savedInstanceState); } } 

Sea cual sea tu problema de cara Exactamente soy cara del problema llamado "Vista de lista Mostrar última posición de datos de un arreglo …"

El problema se genera con el mapa de hash

 final ListView listView = (ListView) findViewById(R.id.mylist); ArrayList<HashMap<String, String>> list_of_bookmarks = new ArrayList<HashMap<String, String>>(); String[] from = { "php_key","c_key","android_key","hacking_key" }; String[] name_of_bookmarks = { "php","c","android","hacking" }; for(int i=0;i<4;i++) { HashMap<String, String> b = new HashMap<String, String>(); b.put(from[i],name_of_bookmarks[i]); list_of_bookmarks.add(b); } }; int[] to = { R.id.txt1,R.id.txt1,R.id.txt1,R.id.txt1}; SimpleAdapter adapter = new SimpleAdapter(getBaseContext(), list_of_bookmarks, R.layout.list_layout, from, to); listView.setAdapter(adapter); 

Pruebe este uno si cualquier duda creada en su mente entonces me pregunta lo que la pregunta otra vez simplemente usted tiene que declaró su mapa de hash dentro de su para el lazo …

Uso del mapa de hash dentro de su variable de bucle "b" creado cada vez y cada vez con considerado como un objeto diferente. Y luego, simplemente cuadro Array Lista de objetos diferentes de Hash Map.

Usted está utilizando el mismo objeto para almacenar el valor del mapa de hash y que la variable fue reemplazar con el mismo nombre Es por eso que se enfrentan al problema Gracias …

  • ListView de Android Actualizar animación
  • Generar listview desde JSON en android
  • Agrupar filas similares en listview en función de su contenido
  • ListView muestra sólo un elemento
  • Elementos de lista personalizada que no responden a state_checked en el selector
  • Establecer LayoutParams de ListView cuando se utiliza DrawerLayout con fragmentos
  • ¿Por qué el texto ListView generado dinámicamente es gris?
  • Resaltar el elemento seleccionado en "ListFragment"?
  • ¿Cómo lleno un ListView (en Android) con datos XML o JSON?
  • Android Descargar varios archivos y mostrar el progreso en ListView
  • ¿Cómo puede inflar una presentación que contenga listview en un cuadro de diálogo de alerta?
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.