代码之家  ›  专栏  ›  技术社区  ›  Farrokh Shahriari

活动中的snackbar错误=>android.view.inflatexception:<merge/>只能与有效的viewgroup根目录和attachtoroot=true一起使用

  •  0
  • Farrokh Shahriari  · 技术社区  · 7 年前

    在将Android Studio更新为3.1.2版和4.4版之后,我遇到了一个奇怪的问题,即如何在活动中显示Snackbar。 代码如下:

     @BindView(R.id.layout_coordinator)
     CoordinatorLayout coordinatorLayout;
    
     Snackbar.make(coordinatorLayout,"hello", Snackbar.LENGTH_LONG).show();
    

    我的XML布局:

    <?xml version="1.0" encoding="utf-8"?>
    <android.support.design.widget.CoordinatorLayout xmlns:android="http://schemas.android.com/apk/res/android"
        xmlns:tools="http://schemas.android.com/tools"
        android:id="@+id/layout_coordinator"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        tools:context=".Activities.LoginActivity">
        <ScrollView
            android:layout_width="match_parent"
            android:layout_height="match_parent"
            android:fillViewport="true">
            <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
                android:layout_width="match_parent"
                android:layout_height="wrap_content"
                android:orientation="vertical"
                android:paddingLeft="70dp"
                android:paddingRight="70dp">
                <EditText
                    android:id="@+id/edtMobileNumber"
                    android:layout_width="match_parent"
                    android:layout_height="wrap_content"
                    android:layout_alignParentRight="true"
                    android:layout_below="@+id/txt_RegisterTitle"
                    android:layout_marginTop="19dp"
                    android:gravity="center"
                    android:hint="@string/enterYourMobilePhone"
                    android:inputType="number"
                    android:maxLength="11"
                    android:maxLines="1" />
                <Button
                    android:id="@+id/btn_Confirm"
                    android:layout_width="130dp"
                    android:layout_height="40dp"
                    android:layout_below="@+id/edtMobileNumber"
                    android:layout_centerHorizontal="true"
                    android:layout_marginTop="16dp"
                    android:background="@drawable/button_background_green"
                    android:text="@string/confirm"
                    android:textAppearance="?android:attr/textAppearanceMedium"
                    android:textColor="@color/white" />
            </RelativeLayout>
        </ScrollView>
    </android.support.design.widget.CoordinatorLayout>
    

    这就是我的错误:

     java.lang.RuntimeException: Unable to start activity ComponentInfo{com.company.myproject/com.company.myproject.Activities.LoginActivity}: android.view.InflateException: <merge /> can be used only with a valid ViewGroup root and attachToRoot=true
        at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2702)
        at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2767)
        at android.app.ActivityThread.access$900(ActivityThread.java:177)
        at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1449)
        at android.os.Handler.dispatchMessage(Handler.java:102)
        at android.os.Looper.loop(Looper.java:145)
        at android.app.ActivityThread.main(ActivityThread.java:5951)
        at java.lang.reflect.Method.invoke(Native Method)
        at java.lang.reflect.Method.invoke(Method.java:372)
        at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1400)
        at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1195)
     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:476)
        at android.view.LayoutInflater.inflate(LayoutInflater.java:415)
        at android.support.design.widget.Snackbar.make(Snackbar.java:143)
        at com.company.myproject.Activities.LoginActivity.onCreate(LoginActivity.java:98)
    

    如您所见,错误是关于充气布局,但无法理解原因: 原因:android.view.inflatexception:只能与有效的viewgroup root和attachtoroot=true一起使用

    必须指出的是,我已经使用了所有建议的解决方案:

    • 我的支持设计版本是:implementation com.android.support:design:27.1.1'
    • 活动从appcompatactivity扩展
    • AppTheme是Theme.AppCompat.Light.NoActionBar
    • 我使用了getwindow().getdecorview().findviewbyid(r.id.layout_coordinator),但没有解决任何问题。

    很高兴有人能帮助我。

    1 回复  |  直到 7 年前
        1
  •  0
  •   Farrokh Shahriari    7 年前

    最后,我找到了解决方案: 有一个 合并标记 在弹出布局时引起异常的snackbar布局中。通过对相关行进行注释,解决了问题。