Rellenar listview de arraylist de objetos
Tengo una listactivity que mostrará una lista de personas nombre y dirección con datos de arraylist de objetos. aquí está el método para llenar el listview hasta ahora ..
private void fillData(ArrayList<Person> messages) { //populating list should go here }
La clase persona es el nombre de las tiendas y la dirección de una persona.
- Identificar cuando una vista realmente aparece / desaparece del área visible de la actividad
- RelativeLayout refresh after view.setVisibility (View.GONE) y view.setVisibility (View.VISIBLE)
- Ocultar una vista de superficie que se superpone a otra
- Establecer visibilidad no funciona imageview
- Establecer programaticamente la visibilidad de fragmento de mapa google (API2)
public class Person { String name; String address; }
Mientras que mi listitem para mi listview consiste en dos textview, como esto:
<TwoLineListItem xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="fill_parent" android:layout_height="wrap_content" android:minHeight="?android:attr/listPreferredItemHeight" android:mode="twoLine" android:clickable="false" android:paddingBottom="9dp" android:paddingTop="5dp" > <TextView android:id="@+id/display_name" android:layout_width="match_parent" android:layout_height="wrap_content" android:layout_marginLeft="10dp" android:textAppearance="?android:attr/textAppearanceLarge" /> <TextView android:id="@+id/display_number" android:layout_width="match_parent" android:layout_height="wrap_content" android:layout_alignLeft="@+id/display_name" android:layout_below="@+id/display_name" android:textAppearance="?android:attr/textAppearanceSmall" />
Quiero que cada elemento de mi listview muestre el nombre y la dirección de cada persona. ¿Puede alguien ayudarme por favor?
Gracias de antemano, y lo siento por mi mal inglés …
- Inicio automático de AnimationDrawable
- Android: Cómo ocultar un elemento ListView
- Animar modos de visibilidad, GONE y VISIBLE
- Setvisibility (view.visible) no funciona después de setvisibility (view.gone)
- Atributo de visibilidad en las preferencias xml no funciona? (Android 2.3)
- Android View con View.GONE sigue recibiendo onTouch y onClick
En tu actividad
AdapterPerson adbPerson; ArrayList<Person> myListItems = new ArrayList<Person>(); //then populate myListItems adbPerson= new AdapterPerson (youractivity.this, 0, myListItems); listview.setAdapter(adbPerson);
Adaptador
public class AdapterPerson extends ArrayAdapter<Person> { private Activity activity; private ArrayList<Person> lPerson; private static LayoutInflater inflater = null; public AdapterPerson (Activity activity, int textViewResourceId,ArrayList<Person> _lPerson) { super(activity, textViewResourceId, _lProducts); try { this.activity = activity; this.lPerson = _lPerson; inflater = (LayoutInflater) activity.getSystemService(Context.LAYOUT_INFLATER_SERVICE); } catch (Exception e) { } } public int getCount() { return lPerson.size(); } public Product getItem(Product position) { return position; } public long getItemId(int position) { return position; } public static class ViewHolder { public TextView display_name; public TextView display_number; } public View getView(int position, View convertView, ViewGroup parent) { View vi = convertView; final ViewHolder holder; try { if (convertView == null) { vi = inflater.inflate(R.layout.yourlayout, null); holder = new ViewHolder(); holder.display_name = (TextView) vi.findViewById(R.id.display_name); holder.display_number = (TextView) vi.findViewById(R.id.display_number); vi.setTag(holder); } else { holder = (ViewHolder) vi.getTag(); } holder.display_name.setText(lProducts.get(position).name); holder.display_number.setText(lProducts.get(position).number); } catch (Exception e) { } return vi; } }
Esta es mi solución al problema del adaptador de lista personalizada. Primero un arrayadadter personalizado:
public class MemoListAdapter extends ArrayAdapter<MemoEntry> { private int layoutResourceId; private static final String LOG_TAG = "MemoListAdapter"; public MemoListAdapter(Context context, int textViewResourceId) { super(context, textViewResourceId); layoutResourceId = textViewResourceId; } @Override public View getView(int position, View convertView, ViewGroup parent) { try { MemoEntry item = getItem(position); View v = null; if (convertView == null) { LayoutInflater inflater = (LayoutInflater) getContext().getSystemService(Context.LAYOUT_INFLATER_SERVICE); v = inflater.inflate(layoutResourceId, null); } else { v = convertView; } TextView header = (TextView) v.findViewById(R.id.list_memo_item_header); TextView description = (TextView) v.findViewById(R.id.list_memo_item_text); header.setText(item.getHeader()); description.setText(item.getValue()); return v; } catch (Exception ex) { Log.e(LOG_TAG, "error", ex); return null; } }
}
y en el método onCreate de la actividad:
adapter = new MemoListAdapter(this, R.layout.list_memo_item_layout); // the adapter is a member field in the activity setContentView(R.layout.activity_view_memo_layout); ListView lv = (ListView) findViewById(R.id.view_memo_memo_list); lv.setAdapter(adapter);
y entonces yo lleno el adaptador después de alguna búsqueda con una llamada como esto:
ArrayList<MemoEntry> memoList = new ArrayList<MemoEntry>(); //here you should use a list with some content in it adapter.addAll(memoList);
Así que para adaptar esto a su solución, cree su propio customadapter, y en lugar de mi objeto MemoEntry, utilice su clase Person. En el método getView, cámbielo para que se adapte a sus necesidades. Es casi lo mismo que lo que estoy haciendo, así que no debería ser demasiado difícil.
Espero que esto te ayude un poco!