在数据绑定和实时数据中使用泛型

时间:2018-04-10 03:33:07

标签: android data-binding android-livedata

我在我的应用程序中使用LiveData和数据绑定来从viewmodel填充recyclerview。

持有物品的物业被定义为

abstract val searchItems : LiveData<List<BindableItem<*>>>

但是,数据绑定正在剥离LiveData的类型并生成无法编译的对象类型实时数据。

这是上面属性的生成代码:

android.arch.lifecycle.LiveData searchViewModelSearchItems = null;

对于其他非泛型属性,保留类型,例如

android.arch.lifecycle.LiveData<java.util.List<com.example.feature.search.adapter.CarouselItem>> searchViewModelCarouselItems = null;

如何将泛型用于数据绑定?

1 个答案:

答案 0 :(得分:0)

我还没有找到让数据绑定编译器接受泛型列表的方法,但是解决方法是将列表定义为类型Any,然后在绑定中强制转换为List<BindableItem<*>>将项目添加到recyclerview的适配器。不理想,但至少有效。

在viewmodel中:

abstract val items: LiveData<List<Any>>

在绑定适配器中:

fun setItems(
        recyclerView: RecyclerView,
        items: List<Any>?,
        onItemClickListener: OnItemClickListener?
) {
    val bindableItems = items as? List<BindableItem<*>>
    /* do other stuff */
}