2010-08-29 10 views

Respuesta

10

Utilice setAdapter() en AlertDialog.Builder para proporcionar su propio ListAdapter personalizado para su lista.

5

Consulte THIS LINK para una implementación de la idea anterior.

edit: por cierto, he hecho algunos cambios para realmente muestran diferentes iconos:

list_item.xml:

<LinearLayout 
    xmlns:android="http://schemas.android.com/apk/res/android" 
    android:orientation="horizontal" 
    android:layout_width="fill_parent" 
    android:layout_height="wrap_content"> 

    <ImageView 
     android:id="@+id/icon" 
     android:contentDescription="@string/icon_descr" 
     android:layout_width="48dp" 
     android:layout_height="48dp" 
     android:layout_gravity="left" /> 

    <TextView 
     android:id="@+id/title" 
     android:text="" 
     android:paddingLeft="10dip" 
     android:layout_gravity="center" 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" /> 
</LinearLayout> 

Y en su actividad:

// dialog list entries 
final String[] items = { 
    getString(R.string.entry_0), 
    getString(R.string.entry_1), 
    getString(R.string.entry_2) 
}; 

// dialog list icons: some examples here 
final int[] icons = { 
    android.R.drawable.ic_menu_edit, 
    android.R.drawable.ic_menu_send, 
    android.R.drawable.ic_menu_delete 
}; 

ListAdapter adapter = new ArrayAdapter<String>(
    getApplicationContext(), R.layout.list_item, items) { 

    ViewHolder holder; 

    class ViewHolder { 
     ImageView icon; 
     TextView title; 
    } 

    public View getView(int position, View convertView, ViewGroup parent) { 
    final LayoutInflater inflater = (LayoutInflater) getApplicationContext() 
     .getSystemService(Context.LAYOUT_INFLATER_SERVICE); 

    if (convertView == null) { 
     convertView = inflater.inflate(
     R.layout.list_item, null); 

     holder = new ViewHolder(); 
     holder.icon = (ImageView) convertView 
     .findViewById(R.id.icon); 
     holder.title = (TextView) convertView 
     .findViewById(R.id.title); 
     convertView.setTag(holder); 
    } else { 
     // view already defined, retrieve view holder 
     holder = (ViewHolder) convertView.getTag(); 
    }  

    holder.title.setText(items[position]); 

    holder.icon.setImageResource(icons[position]); 
    return convertView; 
    } 
}; 

// ---------- 

AlertDialog.Builder builder = new AlertDialog.Builder(myActivity.this); 

builder.setTitle("title"); 

builder.setAdapter(adapter, new DialogInterface.OnClickListener() { 
    public void onClick(DialogInterface dialog, int which) { 
     // --- 
    } 

}); 

builder.create(); 
if (! ((Activity) myActivity.this).isFinishing()) { 
    builder.show(); 
} 
+0

Esto me da el error 'IllegalStateException: servicios del sistema no disponibles para actividades antes de onCreate' – mrid

Cuestiones relacionadas