【问题标题】:Bind a view without extra parameters绑定没有额外参数的视图
【发布时间】:2018-05-13 16:35:48
【问题描述】:

我正在尝试将分隔线装饰绑定到 Recycler 视图

    <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" />

然后我有一个 BindingAdapter 来绑定分隔符

@BindingAdapter("dividerDirection")
    public static void setItemDecoration(RecyclerView view) {
            LineDividerItemDecoration decoration =
                    new LineDividerItemDecoration(view.getContext());
            view.addItemDecoration(decoration);
    }

在没有任何额外参数的情况下绑定视图的正确方法是什么?

如果我使用类似的东西

app:dividerDirection="@{@drawable/line_divider}"

效果很好

但它不适用于

 app:dividerDirection="@{}"

我只需要引用视图来获取上下文

【问题讨论】:

  • 您需要传递参数才能使用绑定适配器。我还没有看到解决办法。

标签: android mvvm data-binding


【解决方案1】:

你不能有一个没有任何参数的绑定适配器。 你可以做的是传递null

app:dividerDirection="@{null}"

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

@BindingAdapter("dividerDirection")
public static void setItemDecoration(RecyclerView view, Integer direction) {
    LineDividerItemDecoration decoration =
                    new LineDividerItemDecoration(view.getContext());
   view.addItemDecoration(decoration);
}

我建议创建具有通用逻辑的绑定适配器,而不是为您拥有的每个用例都使用它。

在你的情况下,如果你想提供分频器方向,你可以传递整数/枚举,这将与参数有一些逻辑。

【讨论】:

  • 因为它是我在每个 RecyclerView 中使用的装饰,我认为要保持简单,只需删除参数,因此不需要特别考虑并且始终使用相同的大小。但很好的答案我会使用枚举或类似的东西:)
【解决方案2】:

recyclerView.addItemDecoration(new LineDividerItemDecoration(this).build());

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2021-10-01
    • 2011-05-24
    • 2017-04-09
    • 2018-05-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多