DialogFragment中的可点击超链接

时间:2012-02-04 16:22:37

标签: android android-fragments 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();
    }
}

当您按下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()中尝试过但没有成功。
仍然得到空指针异常...

3 个答案:

答案 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 个步骤(可用于任何对话框文本视图)是:

  1. 链接
  2. setMovementMethod

此后所有链接都可以正常工作。