Código fuente de Github de los ejemplos en este Post
En Android para mostrar una lista de elementos lo más común es usar un “List View” y un “Adapter”. La idea es básicamente generar un elemento de la interfaz gráfica a partir de cada uno de los datos. Los “List view” son ampliamente utilizados para listas cortas u opciones de menú y pueden verse por ejemplo en una la lista de reproducción de música o una lista de videos en YouTube.
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="fill_parent" android:layout_height="?android:attr/listPreferredItemHeight" android:padding="6dip" > <TextView android:id="@+id/nombre_contacto" android:layout_width="fill_parent" android:layout_height="26dip" android:layout_alignParentTop="true" android:ellipsize="marquee" android:singleLine="true" android:textSize="16sp" /> <TextView android:id="@+id/telefono_contacto" android:layout_width="fill_parent" android:layout_height="wrap_content" android:layout_alignParentRight="true" android:layout_alignWithParentIfMissing="true" android:layout_alignParentBottom="true" android:gravity="center_vertical" android:textSize="12sp" /> </RelativeLayout>
Después creamos nuestro Adapter derivando de la clase ArrayAdapter.En el método getView buscamos cada elemento de los elementos de la interfaz y asignamos la información correspondiente al Contacto actual.
public class ContactosArrayAdapter extends ArrayAdapter<Contacto> { private final List<Contacto> contactos; private final Context context; public ContactosArrayAdapter(Context context, int resource, List<Contacto> objects) { super(context, resource, objects); this.contactos = objects; this.context = context; } @Override public View getView(int position, View convertView, ViewGroup parent) { Contacto contacto = contactos.get(position); LayoutInflater inflater = (LayoutInflater) context .getSystemService(Context.LAYOUT_INFLATER_SERVICE); View rowView = inflater.inflate(R.layout.list_view, parent, false); TextView nombreTextView = (TextView) rowView.findViewById(R.id.nombre_contacto); TextView telefonoTextView = (TextView) rowView.findViewById(R.id.telefono_contacto); nombreTextView.setText(contacto.getName()); telefonoTextView.setText(contacto.getTelefono()); return rowView; } }
Despues incluimos nuestro ContactosAdapter en el fragmento con la información de contactos. En una aplicación real consultaria los datos de una DB o un servicio web.
public class ContactosFragment extends ListFragment { public ContactosFragment() { } @Override public void onViewCreated(View view, Bundle savedInstanceState) { super.onViewCreated(view, savedInstanceState); ContactosArrayAdapter adapter = new ContactosArrayAdapter( getActivity(), R.layout.list_view, ContatosInformacion.getContactos()); setListAdapter(adapter); } }
Finalmente incluimos el fragmento en la actividad principal.
public class ContactosActivity extends Activity { @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); if (savedInstanceState == null) { getFragmentManager().beginTransaction() .add(R.id.container, new ContactosFragment()).commit(); } } }
Ahora si quisiéramos agregar una vista de detalles o (DetailView) podríamos utilizar el click event del ContactosFragment y llamar a nuestra actividad. Les adjunto el código para generando una notificación con el contacto seleccionado.
Contacto contacto = ContactosInformacion.getContactos().get(position); Toast toast = Toast.makeText(v.getContext(), contacto.getName(), Toast.LENGTH_LONG); toast.show();
Ya esta!. List View implementado en Android.