DialogFragment中的可点击超链接

Kav*_*avi 2 android android-fragments android-alertdialog android-dialogfragment

这是我在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();
    }
}
Run Code Online (Sandbox Code Playgroud)

当我按下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;
Run Code Online (Sandbox Code Playgroud)

我正在尝试使用注释行使消息文本中的链接可单击.

我在这里找到了这个方法,在使用常规Dialog(没有片段)时它对我有用.
但是,这是我第一次尝试在DialogFragment上使用它,并且在尝试查找视图时总是遇到NullPointerException.

我也尝试了,aboutFragment.getView().findViewById(android.R.id.message)但也返回null.

也许我太早/在错误的地方调用代码?
任何想法都会很棒!

编辑:只是尝试((TextView) v.getRootView().findViewById(android.R.id.message)).setMovementMethod(LinkMovementMethod.getInstance()); ,并 ((TextView) v.findViewById(android.R.id.message)).setMovementMethod(LinkMovementMethod.getInstance());在onCreateView(),并没有成功也试过在onCreateDialog().
仍然得到空指针异常...

小智 10

希望你已经想到这一点,但我只是做了同样的事情,并希望在某处记录它.把它放在你的DialogFragment班上:

@Override
public void onStart() {
    super.onStart();
    ((TextView) getDialog().findViewById(android.R.id.message))
            .setMovementMethod(LinkMovementMethod.getInstance());
}
Run Code Online (Sandbox Code Playgroud)