我正在使用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
感谢您提供的任何帮助
答案 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。 无论如何,“快速方式”并不总是做某事的“更好方式”。
希望这会有所帮助,再见,编码不错(: