2

これは、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() で試しても成功しませんでした。
まだヌルポインター例外が発生しています...

4

3 に答える 3

10

うまくいけば、あなたはすでにこれを理解していると思いますが、私はこれと同じことをしただけで、どこかに文書化したいと思っていました. これをDialogFragmentクラスに入れます:

@Override
public void onStart() {
    super.onStart();
    ((TextView) getDialog().findViewById(android.R.id.message))
            .setMovementMethod(LinkMovementMethod.getInstance());
}
于 2012-06-18T03:56:04.397 に答える
1

コードの呼び出しが早すぎたり、間違った場所で呼び出している可能性がありますか?

それは私の疑いです。メソッド内で「リンクをクリック可能にする」ことができない理由はありますonCreateDialog()か?

于 2012-02-04T17:05:27.600 に答える