Привязка данных не работает без раздувания

Я использую приведенный ниже код для отображения модели и марки устройства в заголовке навигации. Макет завышен, но текст не отображается. Я попробовал тот же код в другом действии, где я использую привязку данных, и он отлично работает.

Я не уверен, но нужно ли использовать 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>

Если вы раздуваете свой xml с помощью привязки данных, вы можете получить доступ к своему представлению только с помощью этого объекта привязки данных внутри вашей деятельности.

Roshaan Farrukh 07.02.2019 11:12

@RoshaanFarrukh Нет, я не раздуваю с помощью привязки данных. Чтобы проверить, генерируется ли класс привязки данных или нет, я попробовал.

MRX 07.02.2019 11:22
1
2
1 138
1

Ответы 1

Если вы хотите, чтобы ваша привязка работала, вам нужно настроить свой контент способом привязки данных, который должен быть одним из следующих:

Для мероприятий -

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-документация :

This class holds all the bindings from the layout properties (for example, the user variable) to the layout's views and knows how to assign values for the binding expressions.

Таким образом, вы должны установить содержимое с помощью DataBinding, чтобы переменные XML работали. В противном случае сгенерированные классы привязки не будут использоваться.

В вашем случае, если дочерний макет является макетом привязки, то, чтобы дочерний макет работал, родительский макет также должен быть макетом привязки и раздутым с использованием класса привязки.

Другие вопросы по теме