在片段中使用材质对话框

时间:2015-09-26 14:26:40

标签: android android-fragments material-design

我正在使用material-dialogs library https://github.com/afollestad/material-dialogs
我的问题是我不能在片段中使用lib

 @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
        layout=inflater.inflate(R.layout.fragment_option, null);
        new MaterialDialog.Builder(this) //the problem is this line
           .title("test")
           .content("test")
           .show();
        return layout;
    }

我尝试过以下方法但是失败了

 new MaterialDialog.Builder(getActivity())
 new MaterialDialog.Builder(this.getActivity())
 new MaterialDialog.Builder(MainActivity.this) //MainActivity is the parent activity

感谢您提供的任何帮助

2 个答案:

答案 0 :(得分:2)

您无法context onCreateView()方法获取Fragment,因为片段未添加到Activity

唯一的方法是在Context onAttach(Activity activity)Fragment生命周期的Fragment生命周期方法'中获取@Override public void onAttach(Activity activity) { super.onAttach(activity); Context ctx=this.getActivity(); new MaterialDialog.Builder(ctx) .title("test") .content("test") .show(); }

所以你可以用这种方式显示对话:

onAttach(Activity activity)

<强> UPD_0:

确保您在自己的应用中使用版本23.0.1的Google库(AppCompat,支持库等)。 (link

<强> UPD_1:

由于不推荐onAttach(Context context),请使用<h:button>

答案 1 :(得分:0)

由于尚未创建视图,因此无法显示在该片段的“ onCreateView”中。在“ onAttach”方法中执行此操作也不起作用,因为未创建视图。我建议您查看片段的生命周期以获取更多详细信息。当片段附加到活动时,将在“ onCreateView”之前调用“ onAttach”方法。 在“ onAttach(Context context)”内部,您可以初始化片段的回调。

要显示该对话框,可以在“ onStart”方法内或在创建视图后调用的每个生命周期方法中进行操作,将片段附加到活动并设置上下文。我认为“ onViewCreated”方法也可以使用。

我个人更喜欢使用DialogFragment而不是MaterialDialog。我通常只将MaterialDialog用于提示消息(例如AlertDialog)。对于其他诸如确认对话框,列表对话框,过滤器对话框之类的东西,我更喜欢构建一个扩展DialogFragment的对话框类,因为这样我可以轻松地重用该基本对话框。 同样,我通常在活动中实现所有“对话逻辑”,仅当片段可以单独完成所有工作而不进行活动交互时,我才将其放入片段中(例如,如果我的片段包含我需要的所有功能而不是可视化部分)。

我认为MaterialDialog是显示对话框的快速方法,因为您可以通过使用builder方法实例化并显示它,因此您不必担心使用逻辑显示和管理DialogFragment的所有逻辑。 FragmentManager。 无论如何,“快速方式”并不总是做某事的“更好方式”。

希望这会有所帮助,再见,编码不错(: