Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/181.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何自定义Android AlertDialog中的列表项_Android_List_Customization_Android Alertdialog - Fatal编程技术网

如何自定义Android 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的项目吗?或者我真的必须为此创建一个具有列表视图的活动吗?

使用
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之前不可用于活动