Android 在片段中使用材质对话框

Android 在片段中使用材质对话框,android,android-fragments,material-design,Android,Android Fragments,Material Design,我正在使用材质对话框库 我的问题是我不能在片段中使用lib @Override public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { layout=inflater.inflate(R.layout.fragment_option, null); new MaterialDialog.Builder(this

我正在使用
材质对话框库

我的问题是我不能在片段中使用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

感谢您提供的任何帮助

您无法在
onCreateView()中获取
上下文
Fragment
方法,因为中的Fragment未添加到
活动

唯一的方法是在
onAttach(Activity-Activity)
中获取
Context
(或
Fragment
s lifecile的更高方法)的
Fragment
方法

所以您可以这样显示对话框:

@Override
public void onAttach(Activity activity) {
super.onAttach(activity);
Context ctx=this.getActivity();
new MaterialDialog.Builder(ctx)
       .title("test")
       .content("test")
       .show();
}
UPD\U 0:

确保您在自己的应用程序中使用的是Google libs的23.0.1版(AppCompat、Support Library等)。()

UPD_1:

由于不推荐使用
onatach(Activity-Activity)
,请使用
onatach(Context-Context)
您无法在片段的“onCreateView”中显示,因为视图尚未创建。在“onAttach”方法中这样做也不起作用,因为没有创建视图。我建议您查看fragment的生命周期以了解更多细节。当片段附加到活动时,在“onCreateView”之前调用“onAttach”方法。 在“onAttach(Context-Context)”中,您可以初始化片段的回调

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

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

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


希望这有帮助,再见,有一个很好的编码(:

你试过
getSupportActivity()
?我想没有!你能解释更多细节吗?那是什么?可能对你有帮助在
getSupportActivity()
Fragment
,见我的答案)@Johnny你得到了什么样的错误?还可以尝试更新答案中的代码;java.lang.NoSuchMethodError:类Landroid/support/v4/content/ContextCompat中没有静态方法getColor(Landroid/content/Context;I)I;或者它的超类(声明'android.support.v4.content.ContextCompat'出现在/data/app/com.test.app-1/base.apk中)在com.afollestad.materialdialogs.MaterialDialog$Builder.(MaterialDialog.java:478)在com.test.app.FragmentOption.onAttach(FragmentOption.java:32)中,在我的应用程序中,我使用的是一个带有PagerTabStrip的ViewPager,如果使用23.0.1,PagerTabStrip不显示标题,首先@Johnny我确信你可以用android.support.design.widget.TabLayout来替换
PagerTabStrip
,从没有bug的设计库中)嘿@mohax现在onAttach方法被弃用了,我如何在片段中做到这一点?我尝试使用上下文,但仍然显示错误。