2008-11-13 12 views
20

Estoy usando un ListView para mostrar la pantalla principal de mi aplicación.
La pantalla principal es esencialmente menu para acceder a las diferentes secciones de la aplicación. Actualmente, tengo el ListView cuyo contenido se agrega programáticamente en el método onCreate.¿Cómo puedo crear iconos para elementos de menú en ListView de Android?

Aquí es el fragmento de código que hace esto:

String[] mainItems = { 
    "Inbox", "Projects", "Contexts", "Next Actions" 
} 

@Override 
public void onCreate(Bundle icicle) { 
    super.onCreate(icicle); 
    setContentView(R.layout.main); 

    setListAdapter(new ArrayAdapter<String>(
      this, android.R.layout.simple_list_item_1, mainItems)); 
    registerForContextMenu(getListView()); 
} 

Así que el menú es esencialmente sólo un grupo de nodos con el texto contenido en la matriz mainItems. Sé que puedo crear un diseño XML (es decir, R.layout.mainMenu_item) que tiene un ImageView y TextView en él, pero no estoy seguro de cómo configurar el icono de ImageView. He visto que hay un método setImageResouce (int resId), pero la forma de usar esto cuando se genera con un ArrayAdapter me está eludiendo. ¿Hay una mejor manera de hacer esto?

Respuesta

15

Lo que normalmente hago para un ListView es implementar mi propio adaptador extendiendo la práctica clase BaseAdapter. Uno de los métodos abstractos que implementará será getView() como se menciona en el póster anterior. Desde allí, puede inflar un diseño que contenga un ImageView, obtener una referencia al mismo usando findViewById y establecer la imagen en cualquier drawable que haya añadido a sus recursos.

public View getView(int position, View convertView, ViewGroup parent) { 

    View row = inflater.inflate(R.layout.menu_row, null); 

    ImageView icon = (ImageView) row.findViewById(R.id.icon); 
    icon.setImageResource(..your drawable's id...); 

    return view; 
} 
+12

Tenga en cuenta que realmente debería ver convertView y solo inflar nuevas filas si realmente las necesita. Si convertView no es nulo, es una fila pasada que infló antes, para reciclar. Simplemente reinicie el icono y devuelva la fila reciclada. Menos basura creada, ejecución más rápida. – CommonsWare

1

De los documentos de google para ArrayAdapter.

Para usar algo distinto TextViews para la visualización de matriz, por ejemplo, ImageViews, o para que algunos de los datos además toString() resultados llenan los vistas, anular getView (int, Vista, ViewGroup) para devolver el tipo de vista que desee.

Cuestiones relacionadas