0

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

4 回答 4

3

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

于 2012-12-26T11:10:32.517 回答
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();
            }
        });
}
于 2012-12-26T10:38:52.020 回答
0

单击对话框调用的正按钮,dialog.dismiss();然后finish();

于 2012-12-26T10:36:59.193 回答
0

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

  • 如果在活动中定义了侦听器,则使用简单finish()的,不带任何前缀。这样,Java 将寻找最近的封闭对象,该对象定义了一个名为 的方法finish(),它会找到 Activity 的
  • 用于YouActivity.this.finish()引用封闭的活动实例,没有任何歧义(如果侦听器是(可能是匿名的)内部类,则显然这是正确的YourActivity
  • 如果您的活动的某些实例完全在另一个文件中定义,则调用mActivity.finish()它(也许您必须强制转换Context对象)

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

于 2012-12-26T10:41:42.443 回答