studio programacion para móviles libro edición desarrollo desarrollar curso aprende aplicaciones android listview listactivity

para - manual de programacion android pdf



Poblar la vista de lista desde la lista de objetos (2)

Esta es mi solución al problema del adaptador de lista personalizado. Primero un arrayadapter 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 luego lleno el adaptador después de buscarlo con una llamada como esta:

ArrayList<MemoEntry> memoList = new ArrayList<MemoEntry>(); //here you should use a list with some content in it adapter.addAll(memoList);

Entonces, para adaptar esto a su solución, cree su propio adaptador personalizado, y en lugar de mi objeto MemoEntry, use su clase Person. En el método getView, cámbielo según 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!

Tengo una lista de actividad que mostrará una lista de personas con nombre y dirección con datos de la lista de objetos. Aquí está el método para llenar la vista de lista hasta ahora ..

private void fillData(ArrayList<Person> messages) { //populating list should go here }

La clase de persona es el nombre y la dirección de una persona.

public class Person { String name; String address; }

Mientras que mi lista de temas para mi vista de lista consta de dos vistas de texto, como esta:

<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 vista de lista muestre tanto el nombre como la dirección de cada persona. ¿Alguien puede ayudar por favor?

Gracias de antemano, y lo siento por mi mal inglés ...


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