Come personalizzare le voci di elenco in un AlertDialog Android
-
02-10-2019 - |
Domanda
Voglio mostrare più linee con differenti stili di testo per ogni elemento in un elenco utilizzando AlertDialog, ma non riesco a multare alcun esempio.
Qualcuno sa come personalizzare le voci di un AlertDialog? O devo davvero di creare un'attività con un controllo ListView per questo?
Soluzione
Usa setAdapter()
su AlertDialog.Builder
di fornire il proprio ListAdapter
personalizzato per la vostra lista.
Altri suggerimenti
QUESTO LINK per un'implementazione dell'idea sopra.
modifica: a proposito, ho fatto alcune modifiche alla realtà mostrano diverse icone:
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>
E nella vostra attività:
// 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();
}
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow