これは、MainActivity クラス内に AlertDialog を作成するための静的内部クラスです。
public static class AboutDialogFragment extends DialogFragment {
public static AboutDialogFragment newInstance() {
AboutDialogFragment frag = new AboutDialogFragment();
return frag;
}
@Override
public Dialog onCreateDialog(Bundle savedInstanceState) {
return new AlertDialog.Builder(getActivity())
.setIcon(R.drawable.ic_dialog_about)
.setTitle(R.string.about)
.setMessage(R.string.about_message)
..........
.create();
}
}
MainActivity 内にあるメニュー項目を押すと表示されます。
case R.id.about:
DialogFragment aboutFragment = AboutDialogFragment.newInstance();
aboutFragment.show(getSupportFragmentManager(), "about_dialog");
// Make links clickable
((TextView) aboutFragment.getDialog().findViewById(android.R.id.message)).setMovementMethod(LinkMovementMethod.getInstance());
return true;
コメント行を使用して、メッセージ テキスト内のリンクをクリックできるようにしようとしています。
ここでこのメソッドを見つけましたが、通常のダイアログ (フラグメントなし) を使用しているときにうまくいきました。
ただし、これを DialogFragment で使用しようとしたのはこれが初めてで、ビューを見つけようとすると常に NullPointerException が発生します。
私も試しましaboutFragment.getView().findViewById(android.R.id.message)
たが、それもnullを返します。
コードの呼び出しが早すぎたり、間違った場所で呼び出している可能性がありますか?
どんなアイデアも素晴らしいでしょう!
編集: onCreateView() で試し((TextView) v.getRootView().findViewById(android.R.id.message)).setMovementMethod(LinkMovementMethod.getInstance());
て
((TextView) v.findViewById(android.R.id.message)).setMovementMethod(LinkMovementMethod.getInstance());
みましたが、onCreateDialog() で試しても成功しませんでした。
まだヌルポインター例外が発生しています...