当前位置: 首页 > 知识库问答 >
问题:

如何创建一个自定义alertDialog,其中包含绑定到onClick事件android的列表?

轩辕鸿
2023-03-14

我想我有点疯了。。。但我想不出来。我想显示一个绑定到Onclick事件的自定义警报对话框,其中包含来自数据库的数据列表。

如果我使用一个简单的对话框,所有这些都可以完美地工作,但我想让它自定义,以便在警报对话框的顶部设置标题、一些文本视图和按钮(而不是仅使用. setTitle()方法显示标题)。

这是我的代码:

protected void onPostExecute(String file_url) {
        pDialog.dismiss();

        runOnUiThread(new Runnable() {

            @Override
            public void run() {
                infoListButton.setOnClickListener(new OnClickListener() {

                     @Override
                     public void onClick(View arg0) {
                        // custom Dialog
                        AlertDialog.Builder builder;
                        AlertDialog alertDialog;

                        Context mContext = getApplicationContext();
                        LayoutInflater inflater = (LayoutInflater)
                                mContext.getSystemService(LAYOUT_INFLATER_SERVICE);
                        View layout = inflater.inflate(R.layout.custom_dialog_institutionalinfos, null);

                        TextView text = (TextView) layout.findViewById(R.id.custom_dialog_text);
                        text.setText("Hello, this is a custom dialog!");

                        builder = new AlertDialog.Builder(mContext);
                        builder.setView(layout);
                        alertDialog = builder.create();
                        // inflating the custom institutional expandable list layout
                        LayoutInflater li = (LayoutInflater) thisContext.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
                        View v = li.inflate(R.layout.institutional_info_custom_list, null, false);
                        alertDialog.setContentView(v);

                        InstitutionalInfoListView = (ListView) v.findViewById(android.R.id.list);
                        final MasterDetailArrayAdapter adapter = new MasterDetailArrayAdapter(HomeComune.this, MasterDetailInstitutionalInfoList);         
                        InstitutionalInfoListView.setAdapter(adapter);

                        alertDialog.show();
                     }
                });
            }
        });         
    }

当我单击infoListButton并在LogCat中收到消息时,应用程序崩溃:

03-16 19:25:22.905: E/AndroidRuntime(5301): FATAL EXCEPTION: main
03-16 19:25:22.905: E/AndroidRuntime(5301): android.util.AndroidRuntimeException:                              
requestFeature() must be called before adding content

在我调用alertDialog的线路上出现了一个错误。show();方法为什么会发生这种情况?如何解决?

我只想向我的AlertDialog添加一个自定义标题、一个按钮和一个文本视图。

如何做到这一点?

编辑:如何自定义标题并在对话框的右上角添加一个按钮,将其与一个将关闭()对话框的onclick事件绑定???

编辑:我用以下代码创建了一个MyCustomDialog类:

public class MyCustomDialog extends Dialog {

public MyCustomDialog(Context context) {
    super(context);
    requestWindowFeature(Window.FEATURE_NO_TITLE);
    setContentView(R.layout.custom_dialog_institutionalinfos);
    TextView dialogTitle = (TextView) findViewById(R.id.custom_dialog_text);
    dialogTitle.setText("My First Custom Dialog");
}
}

这个XML:

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="fill_parent" >
  <TextView
    android:id="@+id/custom_dialog_text"
    android:layout_width="80dp"
    android:layout_height="wrap_content"
   />
<ListView
    android:id="@android:id/list"
    android:layout_width="fill_parent"
    android:layout_height="wrap_content" 
    android:paddingBottom="20dp"/>

    </RelativeLayout>

我实例化对话框的代码:

   // custom Dialog
                        MyCustomDialog dialog = new MyCustomDialog(thisContext);

                        // inflating the custom institutional expandable list layout
                        LayoutInflater li = (LayoutInflater) thisContext.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
                        View v = li.inflate(R.layout.institutional_info_custom_list, null, false);
                        dialog.setContentView(v);

                        InstitutionalInfoListView = (ListView) v.findViewById(android.R.id.list);
                        final MasterDetailArrayAdapter adapter = new MasterDetailArrayAdapter(HomeComune.this, MasterDetailInstitutionalInfoList);         
                        InstitutionalInfoListView.setAdapter(adapter);

                        dialog.show();

但对话框中没有显示文本。我只看到以下列表:

我错过了什么?更新:MyCustomDialog类:

public class MyCustomDialog extends Dialog {

public MyCustomDialog(Context context) {
    super(context);
    requestWindowFeature(Window.FEATURE_NO_TITLE);
    setContentView(R.layout.custom_title);
    TextView dialogTitle = (TextView) findViewById(R.id.custom_dialog_text);
    dialogTitle.setText("Hello I am a dialog");
}
 }

custom_title.xml:

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="40dp"
android:background="#3FD100"
android:orientation="vertical" >

<TextView
    android:id="@+id/custom_dialog_text"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"

   />

 </LinearLayout> 

实例化MyCustomDialog类的代码:

          // custom Dialog
    MyCustomDialog dialog = new MyCustomDialog(thisContext);
    InstitutionalInfoListView = (ListView) dialog.findViewById(R.id.custom_dialog_list);
final MasterDetailArrayAdapter adapter = new   
    MasterDetailArrayAdapter(HomeComune.this, MasterDetailInstitutionalInfoList);         
                            InstitutionalInfoListView.setAdapter(adapter);

dialog.show();

应用程序崩溃,InstitutionalInfoListView出现空指针异常。setAdapter(适配器);

更新:TextView位于ListView中,如何继续?

共有1个答案

邓毅
2023-03-14

为什么要使用警报对话框?您可以使用一个简单的对话框,它通常会导致较少的问题,并且更适合自定义布局。

编辑:详细信息

首先创建一个XML布局文件,就像为活动所做的一样。然后创建一个扩展对话框的类。假设您的自定义对话框类名为CustomDialog。在公共自定义对话框(上下文上下文)中调用:

super(context);
requestWindowFeature(Window.FEATURE_NO_TITLE);
setContentView(R.layout.custom_dialog);
// find your views and customize them here

编辑:如何创建自定义对话框实例

  • 在xml中,还为ListView提供一个自定义id:android:id=“@id/custom\u dialog\u list”

//自定义对话框MyCustomDialog dialog=new MyCustomDialog(thisContext);

                    // you DO NOT need to inflate a new view. by dialog.setContentView(v); you *replace* your XML file with another layout.

                    // inflating the custom institutional expandable list layout
                    //LayoutInflater li = (LayoutInflater) thisContext.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
                    //View v = li.inflate(R.layout.institutional_info_custom_list, null, false);
                    //dialog.setContentView(v);

                    // dont forget to check this line
                    InstitutionalInfoListView = (ListView) dialog.findViewById(R.id.custom_dialog_list); // set a custom id for your list in the layout
                    final MasterDetailArrayAdapter adapter = new MasterDetailArrayAdapter(HomeComune.this, MasterDetailInstitutionalInfoList);         
                    InstitutionalInfoListView.setAdapter(adapter);

                    dialog.show();
 类似资料:
  • 我们不仅可以分配事件处理程序,还可以从 JavaScript 生成事件。 自定义事件可用于创建“图形组件”。例如,我们自己的基于 JavaScript 的菜单的根元素可能会触发 open(打开菜单),select(有一项被选中)等事件来告诉菜单发生了什么。另一个代码可能会监听事件,并观察菜单发生了什么。 我们不仅可以生成出于自身目的而创建的全新事件,还可以生成例如 click 和 mousedow

  • 问题内容: 我想在单击该div或same的任何子元素时传递父ID 。但是我无法实现。请告诉我我在哪里出错。代码如下: 问题答案: 要将参数传递给事件处理程序,我们需要使用 currying 。使用上述方法时,在调用render时一直没有创建新函数。

  • 我想通过单击该div或同一的任何子元素传递父id。但我无法实现。请告诉我我哪里犯错了。代码如下:

  • 下面是我的FragmentActivity和DialogFragment。我尝试创建一个自定义AlertDialog。我已经部分实现了如下图所示。如何消除自定义AlertDialog周围的白色区域? 下面是我的alertdialog布局xml fragment_dialog.xml

  • 本文向大家介绍Android如何创建自定义ActionBar,包括了Android如何创建自定义ActionBar的使用技巧和注意事项,需要的朋友参考一下 当多个界面都有很多相似部分时,可以考虑创建一个功能较全的模板。而在需要时,可以通过引用模板来实现自己想要实现的功能。比如适配器 Adapter,当很多的适配器都差不多时,就可以通过打造一个通用的适配器来实现。本例中主要是如何创建自定义的 Act

  • 我创建了一个公共日志back-common.xml。我想在另一个文件logback.spring.xml中使用这个文件。请帮助我如何有效地使用它。 截至目前,应用程序正在启动,但不会在控制台中打印日志,并且日志不会填充到日志文件中。请帮忙。不要将其标记为重复,因为我几乎尝试了所有内容,并且我已经为此投入了2天。与此相关的其他问题没有附上有效的答案。 logback-spring.xml logba