8

次のようにダイアログを作成しています。

 @Override
 protected Dialog onCreateDialog(int id) {
  switch (id) {
  case DIALOG_1:
   return new AlertDialog.Builder(this)
   .setTitle(R.string.s_dlg1)
   .setPositiveButton(android.R.string.ok, this)
   .create();

  case DIALOG_2:
   ...
   ...
  }

  return null;
 }

 @Override
 public void onClick(DialogInterface dialog, int whichButton) {
  if (dialog == ???) {
   ...
  }
  else if (dialog == ???){
   ...
  }
 }

onClick メソッドをトリガーしたダイアログを特定するにはどうすればよいですか? クラス内の変数にアクセスしたいので、ダイアログを作成するときにインターフェイス メソッドをインラインとして宣言できません。他のすべてのインターフェイスは、メソッドに何らかの ID を渡して、メソッドを呼び出したオブジェクトを識別しますが、「DialogInterface ダイアログ」では何もできないようです。

4

6 に答える 6

1

おそらく、onclick リスナーを別のクラスとして抽出してから、ダイアログ ID を渡すことができますか? インターフェイスは android.content.DialogInterface.OnClickListener です

于 2010-02-22T06:10:11.640 に答える
0

この質問はかなり古く、これまでに回答が得られていないため、私も遭遇したこの正確な問題の解決策を見つけました。

私が起動したこのアクティビティ内では、ユーザーのアクションに応じて、2 つの異なるカスタムDialogFragments を起動する可能性があります。DialogFragment Aそれらをまたはと呼びましょうB。これらを標準のビルダーで作成し、.show(fragmentManager, <TAG>)タグがどこにあるか、A_TAGまたはB_TAG後で簡単に識別できるようにします。

したがって、これらのいずれかDialogFragmentが表示されます。実装されたもので何をするかを決定する必要があります。onClick(DialogInterface dialog, int buttonClicked)これが私が行った方法です。

final DialogFragment aDialogInterface = (DialogFragment) getSupportFragmentManager().findFragmentByTag(A_TAG);
final DialogFragment bDialogInterface = (DialogFragment) getSupportFragmentManager().findFragmentByTag(B_TAG);

if (aDialogInterface != null) {
            //do something for dialogfragment A
} else if (bDialogInterface != null) {
            //do something for dialogfragment B
}

基本的にnullチェックを行っていますfindFragmentByTag(...)...

于 2018-05-04T09:14:16.480 に答える
0

これは私のために働いています

 case Dialog_import_database:
            return new AlertDialog.Builder(Main.this)
            .setTitle(R.string.ImportDatabaseDialogTitle)
            .setPositiveButton("OK", new DialogInterface.OnClickListener() {

                public void onClick(DialogInterface dialog, int which) {
                    // TODO Auto-generated method stub
                    Log.i("Main","positive Button In dialog Box");

ここで肯定的なボタンがクリックされたときにあなたが望むものは何でも

                }
            })
            .setNegativeButton("Cancel", null)
            .setMessage(R.string.ImportDatabaseMessage)
            .create();
        }
于 2012-01-15T11:30:32.633 に答える