Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/216.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android 无需额外参数即可绑定视图_Android_Mvvm_Data Binding - Fatal编程技术网

Android 无需额外参数即可绑定视图

Android 无需额外参数即可绑定视图,android,mvvm,data-binding,Android,Mvvm,Data Binding,我正在尝试将分隔器装饰绑定到回收器视图 <android.support.v7.widget.RecyclerView android:id="@+id/recycler" app:layoutManager="android.support.v7.widget.LinearLayoutManager" app:dividerDirection="@{}" a

我正在尝试将分隔器装饰绑定到回收器视图

    <android.support.v7.widget.RecyclerView
        android:id="@+id/recycler"
        app:layoutManager="android.support.v7.widget.LinearLayoutManager"
        app:dividerDirection="@{}"
        android:layout_width="match_parent"
        android:layout_height="match_parent" />
在没有任何额外参数的情况下绑定视图的正确方法是什么

如果我使用类似

app:dividerDirection="@{@drawable/line_divider}"
它很好用

但它不适用于任何人

 app:dividerDirection="@{}"

我只需要对视图的引用,就可以获得上下文

recyclerView.addItemDecoration(newlineDividerItemDecoration(this.build())

如果没有任何参数,就不能有绑定适配器。 您可以做的是传递
null

app:dividerDirection=“@{null}”

在这种情况下,绑定适配器可能如下所示:

@BindingAdapter("dividerDirection")
public static void setItemDecoration(RecyclerView view, Integer direction) {
    LineDividerItemDecoration decoration =
                    new LineDividerItemDecoration(view.getContext());
   view.addItemDecoration(decoration);
}
我建议使用通用逻辑创建绑定适配器,而不是为您拥有的每个用例都使用它。


在您的情况下,如果您想提供除法器方向,您可以传递integer/enum,这将与参数有一些逻辑。

您需要传递参数才能使用绑定适配器。我还没有找到解决这个问题的方法。因为这是我在所有RecyclerView中使用的一种装饰,所以我想让它保持简单,只需删除参数,所以不需要特别考虑,并且总是使用相同的大小。但答案很好,我将使用枚举或类似的东西:)
@BindingAdapter("dividerDirection")
public static void setItemDecoration(RecyclerView view, Integer direction) {
    LineDividerItemDecoration decoration =
                    new LineDividerItemDecoration(view.getContext());
   view.addItemDecoration(decoration);
}