/var/log/messages

debugging with sixth sense

DialogPreferences でエラー検出したらダイアログ出したい

ええと、カスタムな DialogPreferences の onDialogClosed メソドで入力値のチェックしてて異常値であった場合、Toast でメセジ出力して設定への反映はしない、という実装にしていたのですが、大事な項目なのでエラーが発生して設定には反映されない旨を分かるようにして欲しい、という至極まっとうなリクエストを頂戴いたしました。

Dialog から Dialog を云々するのはちょっと無理ゲー、って思いつつ親の PreferencesActivity から云々、ってことならできるのかな、と言いつつ試してみました。

こんなやり方完全ダウトかもしれないので、もしそうであればご指摘頂けると非常に助かります。

とりあえず

PreferencesActivity 側に以下を定義。

public static MyAlertDialog extends DialogFragment {

    @Override
    public Dialog onCreateDialog(Bundle savedInstanceState) {
        AlertDialog.Builder Builder = new AlertDialog.Builder(getActivity());
        Builder.setTitle(getResources().getString(R.string.alert_title));
        Builder.setMessage(getResources().getString(R.string.alert_msg));
        Builder.setPositiveButton(getResources().getString(R.string.positive_button),
                new DialogInterface.OnClickListener() {
            public void OnClick(DialogInterface dialog, int whichButton) {
                dialog.dismiss();
            }
        });
        Builder.setCancelable(false);

        return Builder.create();
    }
}

で、もう一つ、protected なインスタンスメソドを定義。

protected void showAlert() {
    FragmentManager manager = getFragmentManager();
    MyAlertDialog alertDialog = new MyAlertDialog();
    alertDialog.show(manager, "dialog");
}

あとは、DialogPreference#onDialogClosed なメソドの中でエラー検出したら以下の記述を追加、で Dialog が出ました。

    if (error)
        ((MyPrefActivity)getActivity()).showAlert();

こんなテキトーな事で良いのか、と思いつつ盛り込んで提供させて頂く次第です。

Comments