我在我的应用程序中使用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;
如何将泛型用于数据绑定?
答案 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 */
}