前提
フラグメント・・・
カスタムダイアログ・・・DialogFragmentKyoutuu.java(この中には番号によっていくつかのダイアログが出せるようになっている)
実現したいこと
インターフェースを実装して、カスタムダイアログから親フラグメントに値を送りたいが、カスタムダイアログのボタンに
public void onClick(DialogInterface dialogInterface, int i) {
listener.send_catch(DialogFagmentkyoutuu.this);// 処理を親のフラグメントにコールバックするメソッド
}
というのがネットに書いてありました。
この部分で「DialogInterface dialogInterface, int i」のようにイベントにインターフェースをつける書き方がわかりませんので、教えていただきたいです。
フラグメントの方で値を受ける書き方などは分かりましたが、この部分の書き方だけが分かりません。
コードは下にあります。
発生している問題・エラーメッセージ
今までは、ViewModelを使って値を送り、スレッドの中でその値を受けていましたが、フラグメントの数が増え、プログラムが複雑になる中でViewModelの値を受け取ることができないフラグメントが出てきたので、インターフェースでコールバックするやり方に変えようと試みています。
該当のソースコード
DoalogFragmentKyoutuu.javaの中の一部
36行目 public void onClick(View v)
の書き方をどのようにすればいいでしょうか。
java
1public class DialogFragmentKyoutuu extends DialogFragment { 2 ・ 3 ・ 4 //インスタンスを生成するメソッド 5 public static DialogFragmentKyoutuu newInstance() { 6 return new DialogFragmentKyoutuu(); 7 } 8 // イベントのコールバックを受け取るためのインターフェースを実装 9 public interface DialogFragmentKyoutuuListener { 10 void send_receive(DialogFragment dialog); 11 } 12 // クリックイベント発火を伝えるために使用するインターフェースインスタンスを定義 13 private DialogFragmentKyoutuuListener listener; 14 15 @Override 16 public void onAttach(Context context) {//アクティビティ,フラグメントと関連づいたとき 17 super.onAttach(context); 18 this.context = context; 19 try { 20 listener = (DialogFragmentKyoutuuListener) getTargetFragment(); 21 } catch (ClassCastException e) { 22 throw new ClassCastException(getTargetFragment().toString() + "はインターフェースを実装していません"); 23 } 24 } 25 public Dialog onCreateDialog(Bundle savedInstanceState){ 26 ・ 27 ・ 28 ・ 29 switch(dialog_num_kyoutuu){ 30 case 0:inflater=LayoutInflater.from(getActivity());//説明表示ダイアログ 31 view=inflater.inflate(R.layout.dialog_custom_kyouutuu_setumei,null); 32 builder.setView(view); 33 Button setumei_bt_tojiru=view.findViewById(R.id.setumei_bt_tojiru);//「閉じる・ゲームに戻る」ボタン 34 setumei_bt_tojiru.setOnClickListener( new View.OnClickListener(){ 35 @Override 36 public void onClick(View v) { 37 if( getActivity().getLocalClassName().equals("TitleActivity")){ 38 dismiss();//ダイアログを消す 39 DialogFragment dialog = new DialogFragmentKyoutuu(); 40 dialog_num_kyoutuu=3;//開始保存取り出しダイアログに進む 41 mainViewModel.setDialog_num_kyoutuu(dialog_num_kyoutuu); 42 dialog.show(getParentFragmentManager(), "dialog_kyoutuu"+dialog_num_kyoutuu); 43 }else { 44 set_flag_count_true();//アクティビティやフラグメントにコールバックするためのメソッド 45 dismiss();//ダイアログを消す 46 } 47 } 48 }); 49 ・ 50 ・ 51 ・ 52 ・ 53 void set_flag_count_true(){ 54 flag_from_dialog_kyoutuu=true; 55 mainViewModel.setFlag_from_dialog_kyoutuu(flag_from_dialog_kyoutuu); 56 if(fragment_num==0) { //アクティビティにflag_count = trueという値を送る場合 57 flag_count = true; 58 ResultReceiver resultReceiver = (ResultReceiver) getActivity(); 59 resultReceiver.onReturnValue(0,0,flag_count,0,0);//flagnum(0:flag_count(fragmentではflag_count_fr) 1:flag_from_dialog 2:) 60 } 61 else { //フラグメントにflag_count = trueという値を送る場合 62 flag_count_fr = true; 63 // 処理を親のフラグメントにコールバックする 64 listener.send_receive(DialogFragmentKyoutuu.this); 65 } 66 } 67 ・ 68 ・ 69 ・ 70 ・ 71
回答2件
あなたの回答
tips
プレビュー