数据绑定无法有效发挥作用

时间:2019-02-07 10:02:25

标签: android android-databinding

我正在使用以下代码在导航标题中显示设备型号和品牌。布局夸大,但未显示文本。我在其他一些使用数据绑定的活动中尝试了相同的代码,并且工作正常。

我不确定,但是是否有必要使用DataBindingUtil.inflate,但是在我的情况下,该视图将用作NavigationBarheader。我已经在活动中验证了会生成NavigationViewHeaderBinding类,因此理想情况下应该可以正常工作。我可能是错的。

<?xml version="1.0" encoding="utf-8"?>
<layout xmlns:android="http://schemas.android.com/apk/res/android">
<data>
    <import type="android.os.Build" />
</data>

<LinearLayout
    android:id="@+id/ll_nav_header_parent"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:orientation="vertical"
    android:paddingLeft="20dp"
    android:paddingTop="80dp"
    android:paddingRight="20dp"
    android:paddingBottom="10dp">


    <TextView

        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_marginTop="10dp"
        android:text="@{Build.BRAND}"
        android:textAlignment="center"
        android:textAllCaps="true"
        android:textColor="@color/colorWhite"
        android:textSize="18sp" />

    <TextView

        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_marginTop="2dp"
        android:text="@{Build.MODEL}"
        android:textAlignment="center"
        android:textColor="@color/colorWhite"
        android:textSize="14sp" />
</LinearLayout>

这是主要的XML

<?xml version="1.0" encoding="utf-8"?>
<android.support.design.widget.CoordinatorLayout 
xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:fitsSystemWindows="true"
tools:context=".home.MainActivity">

<android.support.design.widget.AppBarLayout
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:theme="@style/AppTheme.AppBarOverlay">

    <android.support.v7.widget.Toolbar
        android:id="@+id/toolbar"
        android:layout_width="match_parent"
        android:layout_height="?attr/actionBarSize"
        android:background="?attr/colorPrimary"
        app:popupTheme="@style/AppTheme.PopupOverlay" />

</android.support.design.widget.AppBarLayout>

<include layout="@layout/activity_main" />

<com.andremion.floatingnavigationview.FloatingNavigationView
    android:id="@+id/floating_navigation_view"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:layout_margin="@dimen/fab_margin"
    app:backgroundTint="@color/colorAccent"
    app:drawMenuBelowFab="false"
    app:headerLayout="@layout/navigation_view_header"
    app:layout_anchor="@id/toolbar"
    app:layout_anchorGravity="bottom|end"
    app:menu="@menu/drawer_menu" />

 </android.support.design.widget.CoordinatorLayout>

1 个答案:

答案 0 :(得分:0)

如果要进行绑定,则必须通过数据绑定方式设置内容,该方式必须为以下之一-

活动-

DataBindingUtil.setContentView(this, R.layout.activity_main);

对于片段,对话框/列表-

ListItemBinding binding = ListItemBinding.inflate(layoutInflater, viewGroup, false);
// or
ListItemBinding binding = DataBindingUtil.inflate(layoutInflater, R.layout.list_item, viewGroup, false);

来自Android Documentation

  

此类包含布局属性中的所有绑定(对于   例如用户变量)到布局的视图,并知道如何   为绑定表达式分配值。

因此,您必须通过DataBinding方式设置内容,以使XML变量起作用。否则,生成的绑定类将不被使用。

在您的情况下,如果子布局是绑定布局,则要让子布局起作用,父级也必须是绑定布局,并通过使用绑定类进行充气。