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 回答
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()
    }

上述代码中最重要的两个步骤(可用于任何对话框文本视图)是:

  1. 链接化
  2. 设置运动方法

在此之后,所有链接都将正常工作。

于 2021-07-11T16:23:21.430 回答