这是我在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;
我尝试使用注释行点击消息文本中的链接。
我找到了这个方法here,在使用常规Dialog(没有片段)时它对我有用。
但是,这是我第一次尝试在DialogFragment上使用它而且我总是尝试查找视图时出现NullPointerException。
我也试过了aboutFragment.getView().findViewById(android.R.id.message)
,但也会返回null。
也许我太早/在错误的地方调用代码? 任何想法都会很棒!
编辑:刚试过((TextView) v.getRootView().findViewById(android.R.id.message)).setMovementMethod(LinkMovementMethod.getInstance());
和
在onCreateView()中((TextView) v.findViewById(android.R.id.message)).setMovementMethod(LinkMovementMethod.getInstance());
,并且在onCreateDialog()中尝试过但没有成功。
仍然得到空指针异常...
答案 0 :(得分:10)
希望你已经想到了这一点,但我只是做了同样的事情,并希望在某处记录它。把它放在你的DialogFragment
课程中:
@Override
public void onStart() {
super.onStart();
((TextView) getDialog().findViewById(android.R.id.message))
.setMovementMethod(LinkMovementMethod.getInstance());
}
答案 1 :(得分:1)
也许我太早/在错误的地方调用代码?
这是我的怀疑。您是否有任何理由不能在onCreateDialog()
方法中“点击链接”?
答案 2 :(得分:0)
随着时间的推移,向查询添加一些更新的输入。
override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
super.onViewCreated(view, savedInstanceState)
setupView(view)
}
private fun setupView(view: View) {
toolbar.setNavigationOnClickListener({ v -> dismiss() })
toolbar.title = "New Message"
view.tvTitle.text = arguments?.getString("title")
view.tvBody.autoLinkMask = Linkify.ALL
view.tvBody.text = arguments?.getString("body")
view.tvBody.movementMethod = LinkMovementMethod.getInstance()
}
上述代码中最重要的 2 个步骤(可用于任何对话框文本视图)是:
此后所有链接都可以正常工作。