【问题标题】:Clickable Hyperlinks in DialogFragmentDialogFragment 中的可点击超链接
【发布时间】:2012-02-04 16:22:37
【问题描述】:

这是我在 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,它在使用常规对话框(无片段)时对我有用。
但是,这是我第一次尝试在 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() 中没有成功。
还是出现空指针异常...

【问题讨论】:

    标签: android android-fragments android-alertdialog android-dialogfragment


    【解决方案1】:

    希望您已经知道这一点,但我只是做了同样的事情并想在某个地方记录它。把它放在你的 DialogFragment 类中:

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

    【讨论】:

    • 你拯救了我的一天!
    【解决方案2】:

    也许我太早/在错误的地方调用代码?

    这是我的怀疑。你有什么理由不能在onCreateDialog() 方法中执行“使链接可点击”吗?

    【讨论】:

    • 查看我的编辑。在调用 View v = super.onCreateView(...) 之后,我在 onCreateDialog() 和 onCreateView() 中都进行了尝试,但没有成功!
    【解决方案3】:

    随着时间的推移,向查询中添加一些更新的输入。

    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. setMovementMethod

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-11-07
      • 2016-04-20
      • 2020-12-04
      • 2010-10-26
      • 2014-01-21
      • 2012-10-21
      相关资源
      最近更新 更多