Android 当用户按下关联对话上的肯定按钮时,完成活动

Android 当用户按下关联对话上的肯定按钮时,完成活动,android,android-dialog,Android,Android Dialog,我希望我的活动(显示对话)在用户单击对话的积极按钮时结束。这可能吗。在哪里放置finish() 调用对话的代码: if(name.equals("")) { DialogFragment newFragment = new NouserFragment(); newFragment.show(getFragmentManager(), "makeprofile"); } public Dialog onCreateDialog(Bundle savedInst

我希望我的活动(显示对话)在用户单击对话的积极按钮时结束。这可能吗。在哪里放置finish()

调用对话的代码:

if(name.equals("")) {

        DialogFragment newFragment = new NouserFragment();
        newFragment.show(getFragmentManager(), "makeprofile"); }
public Dialog onCreateDialog(Bundle savedInstanceState) {

    // Use the Builder class for convenient dialog construction

    AlertDialog.Builder builder = new AlertDialog.Builder(getActivity());
    builder.setMessage(R.string.nouseralert)
           .setPositiveButton(R.string.add, new DialogInterface.OnClickListener() {
               public void onClick(DialogInterface dialog, int id) {

                   Intent intent = new Intent(getActivity(), Editprofile.class);
                   startActivityForResult(intent, 0);  

               }
           })
           .setNegativeButton(R.string.ignore, new DialogInterface.OnClickListener() {
               public void onClick(DialogInterface dialog, int id) {
                   // User cancelled the dialog
               }
           });
    // Create the AlertDialog object and return it
    return builder.create();
}
对话代码:

if(name.equals("")) {

        DialogFragment newFragment = new NouserFragment();
        newFragment.show(getFragmentManager(), "makeprofile"); }
public Dialog onCreateDialog(Bundle savedInstanceState) {

    // Use the Builder class for convenient dialog construction

    AlertDialog.Builder builder = new AlertDialog.Builder(getActivity());
    builder.setMessage(R.string.nouseralert)
           .setPositiveButton(R.string.add, new DialogInterface.OnClickListener() {
               public void onClick(DialogInterface dialog, int id) {

                   Intent intent = new Intent(getActivity(), Editprofile.class);
                   startActivityForResult(intent, 0);  

               }
           })
           .setNegativeButton(R.string.ignore, new DialogInterface.OnClickListener() {
               public void onClick(DialogInterface dialog, int id) {
                   // User cancelled the dialog
               }
           });
    // Create the AlertDialog object and return it
    return builder.create();
}

点击对话框的肯定按钮,调用
dialog.disease()然后
finish()

单击对话框的肯定按钮调用
dialog.disease()然后
finish()

您可以使用以下代码:

public void showMessageAlert(){
        runOnUiThread(new Runnable() {
            public void run() {
                AlertDialog.Builder builder = new AlertDialog.Builder(HomeScreen.this);

                builder.setTitle(ConfigClass.ALERT_TITLE);
                builder.setMessage(ConfigClass.MSG_ALERT);

                builder.setCancelable(true);
                builder.setInverseBackgroundForced(true);
                builder.setPositiveButton("I Accept",   new DialogInterface.OnClickListener() {
                    public void onClick(DialogInterface arg0, int arg1) {
                        ActivityName.this.finish();
                    }
                });
                builder.setNegativeButton("I decline",  new DialogInterface.OnClickListener() {
                    public void onClick(DialogInterface arg0, int arg1) {
                        //Do nothing
                    }
                });
                AlertDialog alert = builder.create();
                alert.show();
            }
        });
}
您可以使用以下代码:

public void showMessageAlert(){
        runOnUiThread(new Runnable() {
            public void run() {
                AlertDialog.Builder builder = new AlertDialog.Builder(HomeScreen.this);

                builder.setTitle(ConfigClass.ALERT_TITLE);
                builder.setMessage(ConfigClass.MSG_ALERT);

                builder.setCancelable(true);
                builder.setInverseBackgroundForced(true);
                builder.setPositiveButton("I Accept",   new DialogInterface.OnClickListener() {
                    public void onClick(DialogInterface arg0, int arg1) {
                        ActivityName.this.finish();
                    }
                });
                builder.setNegativeButton("I decline",  new DialogInterface.OnClickListener() {
                    public void onClick(DialogInterface arg0, int arg1) {
                        //Do nothing
                    }
                });
                AlertDialog alert = builder.create();
                alert.show();
            }
        });
}

这是一个内部类可见性/作用域的Java问题。在监听器内部,
这个
引用了
OnClickListener
对象,幸运的是,它没有
finish()
方法。要使其引用活动,请执行以下任一操作:

  • 如果监听器是在活动中定义的,只需使用
    finish()
    ,不带任何前缀。这样,Java将查找最近的封闭对象,该对象定义了一个名为
    finish()
    的方法,并将找到活动的方法
  • 使用
    YouActivity.this.finish()
    引用所包含的活动实例而不产生任何歧义(显然,如果侦听器是
    youractive的内部类(可能是匿名的)
  • 如果活动的某个实例是在另一个文件中定义的,则在该实例上调用
    mActivity.finish()
    (可能您必须强制转换
    上下文
    对象)

通常监听器被定义为活动中的匿名内部类,因此调用finish()unfixed应该足够了,但是您可能需要使用
A.this.finish()命令
表单如果存在名称冲突

这是内部类可见性/作用域的Java问题。在侦听器中,
引用
OnClickListener
对象,并且(幸运的是)它没有
finish()
方法。要让它引用活动,请执行以下操作之一:

  • 如果监听器是在活动中定义的,只需使用
    finish()
    ,不带任何前缀。这样,Java将查找最近的封闭对象,该对象定义了一个名为
    finish()
    的方法,并将找到该活动的方法
  • 使用
    YouActivity.this.finish()
    引用所包含的活动实例而不产生任何歧义(显然,如果侦听器是
    youractive的内部类(可能是匿名的)
  • 如果活动的某个实例是在另一个文件中定义的,则在该实例上调用
    mActivity.finish()
    (可能您必须强制转换
    上下文
    对象)

通常监听器被定义为活动中的匿名内部类,因此调用finish()unfixed应该足够了,但是如果存在名称冲突,您可能需要使用
A.this.finish()
表单。好的。我可以通过将
getActivity().finish()放到
onClick()下来完成活动对话界面的

好的。我可以通过在对话界面的
onClick()
下放置
getActivity().finish()
来完成活动。

放置finish()单击警报对话框的“积极事件”按钮。发布您的代码,以便understand@DipakKeshariya不可以。这将不起作用,因为finish()仅在活动类下被识别。如果我将finish()放在click事件上,则会出现此错误。
类型new DialogInterface.OnClickListener()的方法finish()未定义{}
@Ramkiran当然。@K_-K然后写下你的ActivityName。这个.finish();它会解决你的问题。@K_-K你为什么要在点击积极按钮时打开新的活动?将finish()放在警报对话框的点击积极按钮事件上。发布你的代码,这样可以很容易地打开它understand@DipakKeshariya不,那不行,因为finish()只有在活动类下才能识别。如果在单击事件上放置finish(),则会出现此错误。
对于类型new DialogInterface.OnClickListener(){}
@Ramkiran sure。@K\K然后写入ActivityName.this.finish();这将解决您的问题。@K_K为什么要在单击“肯定”按钮时打开“新活动”?但它无法识别finish(),因为它不是一个活动类。@K_K那么从哪里打开拨号盘?@K_K如果没有问题,您可以将“活动”用作对话框,但它无法识别finish()因为它不是一个活动类。@K_K那么从哪里打开拨号盘?@K_K如果没有问题,您可以将活动用作对话框