首页 > 解决方案 > 如何在 FragmentDialog 中设置标题和文本?

问题描述

我有一个包含 5 个片段的 MainActivity,其中 2 个在右上角的工具栏上有一个帮助图标。我已经在其他 3 个片段上隐藏了这个图标。单击帮助图标后,会显示一个警告对话框,其中包含标题、消息和一个肯定按钮。

这是我的警报对话框代码:

public class HelpDialogFragment extends DialogFragment {

    @Override
    public Dialog onCreateDialog(Bundle savedInstanceState) {
        AlertDialog.Builder builder = new AlertDialog.Builder(getActivity());
        builder.setTitle("Help");
        builder.setMessage("Placeholder");
        builder.setPositiveButton("Got It", new DialogInterface.OnClickListener() {
                public void onClick(DialogInterface dialog, int id) {}
            });
        return builder.create();
    }
}

这就是我从 MainActivity 中展示它的方式:

@Override
public boolean onOptionsItemSelected(MenuItem item) {
    switch (item.getItemId()) {
        case R.id.action_help:
            DialogFragment helpDialog = new HelpDialogFragment();
            helpDialog.show(getSupportFragmentManager(), "dialogHelp");
            return true;
    }
    return super.onOptionsItemSelected(item);
}

上面的代码有效,但我想根据选择的片段显示不同的消息,那么如何更改消息?我试过这个来改变标题

helpDialog.getDialog().setTitle("Some Text");

请注意我要更改对话框消息,即主要内容,我只有setTitle()方法 ongetDialog()而不是setMessage(),以上setTitle只是示例目的,但即使它正在抛出 NullPointerException。

在此处输入图像描述

正如您在上面的屏幕截图中看到的,“占位符”文本是我在创建 AlertDialog 时添加的默认文本,但现在如何更改它?

标签: androidandroid-alertdialog

解决方案


通过阅读您的帖子和评论,您似乎需要根据可见的任何片段设置不同的标题。并且对话框的创建发生在 Activity 中,因此您不确定要设置什么标题。

问题本质上是识别可见片段并根据它设置消息。

您可以使用这样的参数传递消息。

Fragment fragment = new Fragment();
Bundle bundle = new Bundle();
bundle.putString(message, "My title");
fragment.setArguments(bundle);  

然后在您的片段中,获取数据(例如在 onCreate() 方法中)

Bundle bundle = this.getArguments();
if (bundle != null) {
        String message = bundle.getString(message, defaultValue);
}

如何识别当前可见的片段?您可以按照这些答案中的建议执行此操作。获得当前片段后,只需根据它在上面的参数中发送消息即可。

通过结合上述两个想法,您可以做到这一点。

另一种方法是从片段而不是从 Activity 启动对话框,但这会涉及更多更改,因此上述方法更好。


推荐阅读