Snackbar <merge>错误

时间:2017-02-12 13:25:10

标签: android xamarin xamarin.android android-snackbar

我正试图在我的活动中展示snackbar,但InflateException不断打败我。在我的项目的早期阶段,我可以使它工作,以后;我在我的活动中添加了片段,从那时起我就得到了InflateException。

代码:

Snackbar.Make(DrawerLayout, "Message", Snackbar.LengthLong).Show();

DrawerLayout是我的活动的根视图,如下所示:

<android.support.v4.widget.DrawerLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    android:id="@+id/DrawerLayout"
    android:layout_width="match_parent"
    android:layout_height="match_parent">
    <RelativeLayout
        android:layout_width="match_parent"
        android:layout_height="match_parent">
        <android.support.design.widget.AppBarLayout
            android:layout_height="wrap_content"
            android:layout_width="match_parent"
            android:id="@+id/ToolbarLayout">
            <include
                layout="@layout/Toolbar"
                app:layout_scrollFlags="scroll|enterAlways" />
        </android.support.design.widget.AppBarLayout>
        <FrameLayout
            android:id="@+id/ContentFrame"
            android:layout_below="@id/ToolbarLayout"
            android:layout_width="match_parent"
            android:layout_height="match_parent" />
    </RelativeLayout>
    <FrameLayout
        android:id="@+id/LeftDrawer"
        android:layout_width="wrap_content"
        android:layout_height="match_parent"
        android:layout_gravity="start" />
</android.support.v4.widget.DrawerLayout>

请注意我不知道它是否相关,但ContentFrameLeftDrawer是片段占位符

我得到的异常字符串:

Android.Views.InflateException: Binary XML file line #18: <merge /> can be used only with a valid ViewGroup root and attachToRoot=true ---> Android.Views.InflateException: <merge /> can be used only with a valid ViewGroup root and attachToRoot=true
   --- End of inner exception stack trace ---
  at System.Runtime.ExceptionServices.ExceptionDispatchInfo.Throw () [0x0000c] in /Users/builder/data/lanes/3511/501e63ce/source/mono/mcs/class/referencesource/mscorlib/system/runtime/exceptionservices/exceptionservicescommon.cs:143 
  at Java.Interop.JniEnvironment+StaticMethods.CallStaticObjectMethod (Java.Interop.JniObjectReference type, Java.Interop.JniMethodInfo method, Java.Interop.JniArgumentValue* args) [0x00082] in /Users/builder/data/lanes/3511/501e63ce/source/Java.Interop/src/Java.Interop/Java.Interop/JniEnvironment.g.cs:12649 
  at Android.Runtime.JNIEnv.CallStaticObjectMethod (System.IntPtr jclass, System.IntPtr jmethod, Android.Runtime.JValue* parms) [0x00000] in /Users/builder/data/lanes/3511/501e63ce/source/monodroid/src/Mono.Android/JNIEnv.g.cs:562 
  at Android.Support.Design.Widget.Snackbar.Make (Android.Views.View view, Java.Lang.ICharSequence text, System.Int32 duration) [0x00078] in <0d997552ddad494094d94e2a353b2022>:0 
  at Android.Support.Design.Widget.Snackbar.Make (Android.Views.View view, System.String text, System.Int32 duration) [0x00013] in <0d997552ddad494094d94e2a353b2022>:0 
  at FC.Android.Infrastructure.Activities.MainActivity.NavDrawer_NavigationItemSelected (System.Object sender, Android.Views.IMenuItem e) [0x00029] in E:\Documents\Visual Studio 2015\Projects\FC\FC.Android\Infrastructure\Activities\MainActivity.cs:73 
  --- End of managed Android.Views.InflateException stack trace ---
android.view.InflateException: Binary XML file line #18: <merge /> can be used only with a valid ViewGroup root and attachToRoot=true
    at android.view.LayoutInflater.inflate(LayoutInflater.java:539)
    at android.view.LayoutInflater.inflate(LayoutInflater.java:423)
    at android.support.design.widget.Snackbar.<init>(Snackbar.java:188)
    at android.support.design.widget.Snackbar.make(Snackbar.java:215)
    at mono.android.view.View_OnClickListenerImplementor.n_onClick(Native Method)
    at mono.android.view.View_OnClickListenerImplementor.onClick(View_OnClickListenerImplementor.java:30)
    at android.view.View.performClick(View.java:5204)
    at android.view.View$PerformClick.run(View.java:21153)
    at android.os.Handler.handleCallback(Handler.java:739)
    at android.os.Handler.dispatchMessage(Handler.java:95)
    at android.os.Looper.loop(Looper.java:148)
    at android.app.ActivityThread.main(ActivityThread.java:5480)
    at java.lang.reflect.Method.invoke(Native Method)
    at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:726)
    at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:616)
Caused by: android.view.InflateException: <merge /> can be used only with a valid ViewGroup root and attachToRoot=true
    at android.view.LayoutInflater.inflate(LayoutInflater.java:485)
    ... 14 more

我查看以下内容:

  1. 活动主题继承自Theme.AppCompat.Light.NoActionBar
  2. 尝试Window.DecorView.RootViewFindViewById(Android.Resource.Id.Content)代替DrawerLayout它不起作用
  3. 修改 我发现了一些奇怪的事情:如果我用Debug运行应用程序我得到错误,如果正常运行应用程序(没有附加调试器),snackbars工作得很好。

1 个答案:

答案 0 :(得分:0)

将其显示在ContentFrame而不是Drawerlayout

Snackbar.Make(contentFrame, "Message", Snackbar.LengthLong).Show();

并且不要忘记首先将视图ContentFrame绑定到变量contentFrame

Snakbar make

相关问题