单击按钮时弹出AlertDialog

时间:2014-06-30 00:10:58

标签: android runtime alertdialog

我有一个TableLayout,我希望用户在运行时能够添加项目(并使用单个EditText命名这些项目)。因此,我需要一个“添加”按钮,我认为AlertDialog适合。有来自android开发人员教程的标准代码:

        AlertDialog.Builder builder = new AlertDialog.Builder(this);
    LayoutInflater inflater = this.getLayoutInflater();
    builder.setView(inflater.inflate(R.layout.add_layout,null));
    builder.setPositiveButton(R.string.yes, new DialogInterface.OnClickListener() {
               public void onClick(DialogInterface dialog, int id) {
                   // User clicked OK button
               }
           });
    builder.setNegativeButton(R.string.cancel, new DialogInterface.OnClickListener() {
               public void onClick(DialogInterface dialog, int id) {
                   // User cancelled the dialog
               }
           });
    AlertDialog dialog = builder.create();
    dialog.show();

在将它放入Activity的onCreate方法时效果很好,但在将此插入onClick方法时不能用于此“添加”按钮。为什么这样,我该如何解决这个问题? 更多信息:通过活动的XML文件android:onClick =“Add”调用AddClick按钮onClick方法,然后它是activity的java / class文件中的一个函数。单击“添加”按钮时发生的情况就是“活动”崩溃,而不是整个应用程序,然后我向父活动返回一步,并显示以下消息:“应用程序已停止运行”。

1 个答案:

答案 0 :(得分:1)

我认为您可能对这个问题没有太多回应,因为您没有提供足够的信息。当您将其添加到“添加”按钮的onClick方法时,表示AlertDialog 无效 。怎么了?应用程序崩溃了吗?如果是这样,你得到什么错误信息?或者它没有崩溃,但没有显示AlertDialog?你如何将AlertDialog放在onClick方法中?您是在布局xml中使用android:onClick="someMethod"属性,还是在代码中分配了onClickListener?

我会猜测并假设您在代码中使用以下格式分配onClickListener:

myAddButton.setOnClickListener(new View.OnClickListener() {
    @Override
    public void onClick(View v) {
        AlertDialog.Builder builder = new AlertDialog.Builder(this);
        LayoutInflater inflater = this.getLayoutInflater();
        builder.setView(inflater.inflate(R.layout.add_layout,null));
        ...
    }
});

如果您采用上述方法,您需要意识到您正在使用匿名内部类,并且this关键字引用它所在的对象。在匿名内部类中,{{1} } keyword不再引用已放入匿名内部类的父活动。

this构造函数希望您传递一个上下文。当您在Activity的onCreate()方法中编写AlertDialog.Builder()时,AlertDialog.Builder(this)引用Activity,而Activity是Context的子类,因此this构造函数很高兴。 /> 但是,当您在AlertDialog.Builder()中编写AlertDialog.Builder(this)时,View.OnClickListener()现在引用的是onClickListener,它不是Context的子类,因此this构造函数不满意。

如果这不是您正在采取的方法,那么提供更多信息,以便为您提供帮助。

如果这是你正在采取的方法,那么你可以通过将AlertDialog创建放回Activity中来解决问题。

AlertDialog.Builder()