Q&A
実現したいこと
カスタムダイアログのボタンを押した時の結果をフラグメント送りたいですが、どうしてもできません。教えてください。
アラートダイアログでの結果をフラグメントに送ることはできます。
どのように書き方を変えたらできるのでしょうか。
kotlinで書いてあるサイトはあるのですが、javaで書いてあるサイトが見つからず、javaで教えていただきたいです。
アラートダイアログの値を送ることはできているので、ソースコードはダイアログフラグメントのコードだけ載せます。
アラートダイアログのコード(値をフラグメントに送ることができている)
java
1public class SampleDialogFragment extends DialogFragment { 2 3 // インスタンスを生成するメソッド 4 public static SampleDialogFragment newInstance() { 5 return new SampleDialogFragment(); 6 } 7 // イベントのコールバックを受け取るためのインターフェースを実装 8 public interface SampleDialogListener { 9 void onDialogPositiveClick(DialogFragment dialog); 10 } 11 // クリックイベント発火を伝えるために使用するインターフェースインスタンスを定義 12 private SampleDialogListener listener; 13 14 // onAttach()で呼び出し元の親フラグメントがインターフェースを実装しているかを検証 15 // onAttach(): フラグメントのライフサイクルで最初に呼ばれるメソッドであり、 16 // フラグメントがアクティビティと関連づけられたときに一度だけ呼び出される。contextには所属親アクティビティが入っている・・・② 17 @Override 18 public void onAttach(Context context) { 19 super.onAttach(context); 20 try { 21 // 親フラグメントにイベントを送信できるように呼び出し元であるSampleFragmentオブジェクトを取得し、 22 // listenerのインスタンスを生成する 23 listener = (SampleDialogListener) getTargetFragment(); 24 } catch (ClassCastException e) { 25 // 親フラグメントがインターフェースを実装していない場合は例外を投げる 26 throw new ClassCastException(getTargetFragment().toString() + "はインターフェースを実装していません"); 27 } 28 } 29 // ダイアログを生成するonCreateDialog 30 @Override 31 public Dialog onCreateDialog(Bundle savedInstanceState) { 32 33 // ダイアログを生成する・・・③ 34 return new AlertDialog.Builder(getActivity()) 35 .setTitle("確認") 36 .setMessage("コールバックを開始しますか?") 37 .setPositiveButton("OK", new DialogInterface.OnClickListener() { 38 @Override 39 public void onClick(DialogInterface dialogInterface, int i) { 40 // 処理を親のフラグメントにコールバックする・・・④ 41 listener.onDialogPositiveClick(SampleDialogFragment.this); 42 } 43 }) 44 .setNegativeButton("キャンセル", null) // キャンセルボタンでは何もしないためnull 45 .create(); 46 } 47
カスタムダイアログのコード(カスタムダイアログをセットするところまで)
java
1 @Override 2 public Dialog onCreateDialog(Bundle savedInstanceState) { 3 //XMLとの紐付け 4 LayoutInflater inflater = getActivity().getLayoutInflater(); 5 View view = inflater.inflate(R.layout.layout_dialog, null, false); 6 7 //ダイアログの作成 8 Dialog dialog = new Dialog(getActivity()); 9 dialog.setContentView(view); 10 Button btOK=view.findViewById(R.id.btOK); 11 //OKボタンのリスナー 12 btOk.setOnClickListener(okButtonClickListener); 13// ここから下(上もおかしいかもしれません)、処理を親のフラグメントにコールバックする書き方を教えてください。 14 15 16 17 18 19 return dialog; 20 } 21}
回答1件
あなたの回答
tips
プレビュー
下記のような回答は推奨されていません。
このような回答には修正を依頼しましょう。
2022/12/22 05:58
2022/12/22 06:57 編集
2022/12/22 08:55