当用户在相关对话框上按下正按钮时完成活动

时间:2012-12-26 10:34:14

标签: android android-dialog

我希望我的活动(显示对话)在用户点击对话框的正面按钮时完成。这可能吗。我在哪里放置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();
}

4 个答案:

答案 0 :(得分:3)

好。通过将getActivity().finish()放在onClick()对话界面下,我能够完成活动。

答案 1 :(得分:1)

您可以使用此代码:

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();
            }
        });
}

答案 2 :(得分:0)

点击对话框电话dialog.dismiss();的正面按钮,然后点击finish();

答案 3 :(得分:0)

这是内部类可见性/范围的Java问题。在侦听器内部,this引用OnClickListener对象,并且(幸运的是)它没有finish()方法。要让它参考活动,可以:

  • 如果在活动中定义了侦听器,则只使用finish(),不带任何前缀。这样,Java将查找最近的封闭对象,该对象定义了一个名为finish()的方法,它将找到Activity的一个
  • 使用YouActivity.this.finish()来引用封闭活动实例而没有任何歧义(如果监听器是YourActivity
  • 的(可能是匿名的)内部类,显然这是成立的
  • 如果活动的某个实例完全在另一个文件中定义,则调用mActivity.finish()(也许您必须投射Context个对象)

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