android - 如何防止 livedata 返回 null 到绑定适配器?
问题描述
我的 xml 布局中有一个微调器,它设置了一个名为 sourceData 的属性
<layout xmlns:android="http://schemas.android.com/apk/res/android">
<data>
<import type="com.lionosur.dailyexpenses.database.Entity.Source"/>
<import type="java.util.List"/>
<import type="android.arch.lifecycle.LiveData"/>
<variable name="createExpenseViewModel" type="com.lionosur.dailyexpenses.viewModels.MainViewModel"/>
</data>
<Spinner
android:layout_width="0dp"
android:layout_height="wrap_content"
android:id="@+id/expense_category"
app:sourceData="@{createExpenseViewModel.getAllSourceItems(1)}"
app:layout_constraintStart_toStartOf="@+id/textView"
android:layout_marginTop="20dp"
app:layout_constraintTop_toBottomOf="@+id/textView" app:layout_constraintWidth_percent="0.7"
/>
方法 createExpenseViewModel.getAllSourceItems(1) 返回LiveData<List<Source>>类型的变量,我编写了一个绑定适配器将该方法返回的列表绑定到微调器
class AddExpenseAdapter {
companion object {
@JvmStatic
@BindingAdapter("app:sourceData")
fun setSourceData(spinner: Spinner, sourceList: List<Source>?) {
val categoryItems = ArrayList<String>()
if (sourceList != null) {
categoryItems.addAll(sourceList.map { it.sourceName })
}
val spinnerAdapter =
ArrayAdapter<String>(spinner.context, android.R.layout.simple_spinner_dropdown_item, categoryItems)
spinner.adapter = spinnerAdapter
}
}
}
我在我的活动中实现了如下绑定
lateinit var binding: ActivityCreateExpenseBinding
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
supportActionBar?.setDisplayHomeAsUpEnabled(true)
supportActionBar?.setDisplayShowHomeEnabled(true)
binding = DataBindingUtil.setContentView(this, R.layout.activity_create_expense)
val mainViewModel = DaggerExpenseComponent.builder()
.setContext(this)
.build()
.getExpenseViewModel()
binding.setLifecycleOwner(this)
binding.createExpenseViewModel = mainViewModel
}
但是我的方法 fun setSourceData(spinner: Spinner, sourceList: List?) sourceList 总是收到 null 值,我只是很困惑为什么 livedata 返回 null 到绑定适配器,如果我在活动中观察到相同的 viewmodel 方法,那么我可以看到项目,但使用数据绑定我只能获取空值到我的绑定适配器
解决方案
推荐阅读
- collections - 将结果集转换为地图
- r - 输入波的幅度与傅立叶系数幅度有很大不同
- sql - 如何在不删除 SQL/Impala 中的行的情况下将列中的重复值设置为零?
- java - Why am I getting 'Can't read from server error' with Swagger and OIDC?
- android - 在Playstore上上传应用程序后Firebase电话身份验证未发送消息
- python - 任何人都可以建议如何使用 send_mail 发送电子邮件?它不工作
- vert.x - Vertx:未来的结果可用性和编码模式
- java - Randoop 执行错误,由于异常无法加载类
- django - 如何在 Django REST 框架中正确设置 HTTP_405_METHOD_NOT_ALLOWED 状态代码的 Allow 标头
- swift - NSFetchedResultsController 在删除后不更新计数