1

我想使用“新”数据绑定库将标题布局和菜单绑定到我的 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;
    }

}

但我得到了这个例外:

错误:(41, 33) 找不到参数类型为 int 的属性“app:headerLayout”的设置器。

我应该使用什么样的类型?

4

1 回答 1

0

我曾经收到此错误,但现在我使用@BindingAdapter.

@BindingAdapter(value = "app:headerLayout", requireAll = false)
public static void inflateHeaderLayout(NavigationView navigationView, @LayoutRes int layoutRes) {
    navigationView.inflateHeaderView(layoutRes);
}

剩下的就是你设置的数据代码。

根据这个介绍,他们将其称为 Automagic Attributes,而 Data Binding 的一些自定义属性能够通过使用前缀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, 中没有setHeaderLayout()方法NavigationView。所以我们需要为那个属性创建一个绑定适配器。

于 2016-06-19T05:10:35.177 回答