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()探し、アクティビティのオブジェクトを見つけます。
  • あいまいさのない、囲んでいるアクティビティインスタンスを参照するために使用YouActivity.this.finish()します(リスナーが(おそらく匿名の)内部クラスである場合、これは明らかに当てはまります。YourActivity
  • 別のファイルで完全に定義されている場合は、アクティビティのインスタンスを呼び出しmActivity.finish()ます(Contextオブジェクトをキャストする必要がある場合もあります)

通常、リスナーはアクティビティ内の匿名の内部クラスとして定義されるため、接頭辞なしでfinish()を呼び出すだけで十分ですがA.this.finish()、名前の衝突がある場合はフォームを使用することをお勧めします

于 2012-12-26T10:41:42.443 に答える