寒川アクアブログ

美容師しながらアプリ開発していて水草が趣味の私のブログです

FragmentDialogを使う

備忘録は、確認が完全でないため、不確かな情報が含まれる場合があります。

フラグメントダイアログを継承した、独自のダイアログの作成方法です

フラグメントダイアログは、newInstanceでインスタンス化する。
また、その際に任意のパラメーターを定義することができる。

静的メソッド、コンストラクターを定義
//    定数定義
private static final String ARG_PARAM1 = "param1";
private static final String ARG_PARAM2 = "param2";


public static SampleDialog newInstance(int int1, int int2) {

        SampleDialog fragment = new SampleDialog();
        Bundle args = new Bundle();
        args.putInt(ARG_PARAM1, int1);
        args.putInt(ARG_PARAM2, int2);    //    同様にして増やすことが可能
        fragment.setArguments(args);

        return fragment;
    }

public SampleDialog() {
    //    空のコンストラクター
    }
ダイアログ側のオーバーライドメソッドを編集
@NonNull
@Override
public Dialog onCreateDialog(Bundle savedInstanceState) {

    Dialog dialog = new Dialog(getActivity());
    dialog.requestWindowFeature(Window.FEATURE_NO_TITLE);    //    独自レイアウトにしたいので、タイトル非表示
    dialog.setContentView(R.layout.dialog_sample);    //    用意したレイアウトリソースxmlファイル

    if (getArguments() != null){
        int int1 = getArguments().getInt(ARG_PARAM1);
        int int2 = getArguments().getInt(ARG_PARAM2);            
    }

    return dialog;

    }

独自のダイアログをリターンするようにします。
インスタンス化の際に渡されたパラメーターを得ることができ、
ダイアログで扱うデータの初期化などを行えます。

呼び出すアクティビティ側のコード

public class MyActivity extends FragmentActivity{ ...

フラグメントダイアログを呼び出すときは、
アクティビティがフラグメントアクティビティを継承している必要があります。
(理由はわかりません)

SampleDialog dialog = SampleDialog.newInstance(123,456);
dialog.show(getSupportFragmentManager(), "Sample_dialog");

呼び出すときは簡単です。
show()の第2引数の文字列はタグで、任意の文字列でOKです。