如何自定义Android AlertDialog中的列表项
我想使用AlertDialog为列表中的每个项目显示具有不同文本样式的多行,但无法细化任何示例如何自定义Android AlertDialog中的列表项,android,list,customization,android-alertdialog,Android,List,Customization,Android Alertdialog,我想使用AlertDialog为列表中的每个项目显示具有不同文本样式的多行,但无法细化任何示例 有人知道如何自定义AlertDialog的项目吗?或者我真的必须为此创建一个具有列表视图的活动吗?使用AlertDialog.Builder上的setAdapter()为列表提供您自己的自定义ListAdapter。编辑:顺便说一句,我做了一些更改以实际显示不同的图标: list\u item.xml: <LinearLayout xmlns:android="http://schema
有人知道如何自定义AlertDialog的项目吗?或者我真的必须为此创建一个具有列表视图的活动吗?使用
AlertDialog.Builder
上的setAdapter()
为列表提供您自己的自定义ListAdapter
。编辑:顺便说一句,我做了一些更改以实际显示不同的图标:
list\u 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>
在你的活动中:
// 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();
}
//对话框列表项
最终字符串[]项={
getString(R.string.entry_0),
getString(R.string.entry_1),
getString(R.string.entry_2)
};
//对话框列表图标:这里有一些例子
最终int[]图标={
android.R.drawable.ic_菜单_编辑,
android.R.drawable.ic_菜单_发送,
android.R.drawable.ic\u菜单\u删除
};
ListAdapter=新阵列适配器(
getApplicationContext(),R.layout.list_项,项){
视窗座;
类视图持有者{
图像视图图标;
文本视图标题;
}
公共视图getView(int位置、视图转换视图、视图组父视图){
最终LayoutFlater充气器=(LayoutFlater)getApplicationContext()
.getSystemService(上下文布局\充气机\服务);
if(convertView==null){
convertView=充气机。充气(
R.layout.list_项,空);
holder=新的ViewHolder();
holder.icon=(图像视图)convertView
.findviewbyd(R.id.icon);
holder.title=(TextView)convertView
.findviewbyd(R.id.title);
convertView.setTag(支架);
}否则{
//视图已定义,检索视图持有者
holder=(ViewHolder)convertView.getTag();
}
持有者.头衔.setText(项目[位置]);
holder.icon.setImageResource(图标[位置]);
返回视图;
}
};
// ----------
AlertDialog.Builder=新建AlertDialog.Builder(myActivity.this);
建造商名称(“名称”);
setAdapter(适配器,新的DialogInterface.OnClickListener(){
public void onClick(DialogInterface dialog,int which){
// ---
}
});
builder.create();
如果(!((活动)myActivity.this).isFinishing()){
builder.show();
}
这给了我一个错误IllegalStateException:系统服务在onCreate之前不可用于活动