Android绑定布局id
Android Binding layout id
我想使用 "new" 数据绑定库将页眉布局和菜单绑定到我的 NavigationView。
我这样试过:
<android.support.design.widget.NavigationView
android:id="@+id/navigation_view"
android:layout_height="match_parent"
android:layout_width="wrap_content"
android:layout_gravity="start"
app:headerLayout="@{navigationViewModel.HeaderLayout}"
app:menu="@{navigationViewModel.Menu}" />
我的视图模型是这样的:
public class NavigationViewModel extends BaseObservable {
public @IdRes int getHeaderLayout(){
return 0;
}
public @MenuRes int getMenu(){
return 0;
}
}
但是我得到了这个例外:
Error:(41, 33) Cannot find the setter for attribute 'app:headerLayout' with parameter type int.
我应该使用什么样的类型?
我曾经遇到过这个错误,但现在我使用 @BindingAdapter
修复了它。
@BindingAdapter(value = "app:headerLayout", requireAll = false)
public static void inflateHeaderLayout(NavigationView navigationView, @LayoutRes int layoutRes) {
navigationView.inflateHeaderView(layoutRes);
}
剩下的就是你设置的数据码。
根据 this 介绍,他们将其称为 Automagic Attributes,而一些自定义属性数据绑定能够通过使用前缀 set
(也许 :))找到它们的方法。例如,
<android.support.v4.widget.DrawerLayout
android:layout_width="wrap_content"
android:layout_height="wrap_content"
app:scrimColor="@{@color/scrim}"/>
然后没有错误因为
drawerLayout.setScrimColor(
resources.getColor(R.color.scrim))
但是在app:headerLayout
的情况下,NavigationView
中没有setHeaderLayout()
方法。所以我们需要为该属性创建一个绑定适配器。
我想使用 "new" 数据绑定库将页眉布局和菜单绑定到我的 NavigationView。
我这样试过:
<android.support.design.widget.NavigationView
android:id="@+id/navigation_view"
android:layout_height="match_parent"
android:layout_width="wrap_content"
android:layout_gravity="start"
app:headerLayout="@{navigationViewModel.HeaderLayout}"
app:menu="@{navigationViewModel.Menu}" />
我的视图模型是这样的:
public class NavigationViewModel extends BaseObservable {
public @IdRes int getHeaderLayout(){
return 0;
}
public @MenuRes int getMenu(){
return 0;
}
}
但是我得到了这个例外:
Error:(41, 33) Cannot find the setter for attribute 'app:headerLayout' with parameter type int.
我应该使用什么样的类型?
我曾经遇到过这个错误,但现在我使用 @BindingAdapter
修复了它。
@BindingAdapter(value = "app:headerLayout", requireAll = false)
public static void inflateHeaderLayout(NavigationView navigationView, @LayoutRes int layoutRes) {
navigationView.inflateHeaderView(layoutRes);
}
剩下的就是你设置的数据码。
根据 this 介绍,他们将其称为 Automagic Attributes,而一些自定义属性数据绑定能够通过使用前缀 set
(也许 :))找到它们的方法。例如,
<android.support.v4.widget.DrawerLayout
android:layout_width="wrap_content"
android:layout_height="wrap_content"
app:scrimColor="@{@color/scrim}"/>
然后没有错误因为
drawerLayout.setScrimColor(
resources.getColor(R.color.scrim))
但是在app:headerLayout
的情况下,NavigationView
中没有setHeaderLayout()
方法。所以我们需要为该属性创建一个绑定适配器。