如何将参数传递给数据绑定中的函数?
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了如何将参数传递给数据绑定中的函数?相关的知识,希望对你有一定的参考价值。
我的布局文件中有两个变量:
<data>
<variable name="createExpenseViewModel" type="com.lionosur.dailyexpenses.viewModels.MainViewModel"/>
<variable name="createExpenseConverter" type="com.lionosur.dailyexpenses.converters.createExpenseActivityConverter.Companion"/>
</data>
我的视图模型有一个返回实时数据的方法:
fun getAllExpenseItems(): LiveData<List<Expense>> {
return expenseRepository.getAllExpenseItems()
}
我需要观察这些数据并填充一个微调器,
class createExpenseActivityConverter {
// contains all the static methods to convert the data for the ui
companion object {
fun getExpenseCategoryListFromSource(list:List<Source>):ArrayList<String> {
val categoryItems = ArrayList<String>()
categoryItems.addAll(list.map { it.sourceName })
return categoryItems
}
}
}
填充微调器我需要提供一个字符串数组列表
<Spinner
android:layout_width="0dp"
android:layout_height="wrap_content"
android:id="@+id/expense_category"
android:entries="@{()-> 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"
/>
在android:条目我需要将观察到的数据转换为字符串的数组列表,如何将@{()-> createExpenseViewModel.getAllSourceItems(1) }
结果传递给另一个静态方法createExpenseViewConverter.getExpenseCategoryListFromSource(sourceList)
,它将返回一个字符串数组列表。
在我的活动中,我有这样的设置绑定
binding = DataBindingUtil.setContentView(this, R.layout.activity_create_expense)
val mainViewModel = DaggerExpenseComponent.builder()
.setContext(this)
.build()
.getExpenseViewModel()
binding.setLifecycleOwner(this)
binding.createExpenseViewModel = mainViewModel
您需要使用以下语法:
android:entries="@{createExpenseConverter.getExpenseCategoryListFromSource(createExpenseViewModel.getAllSourceItems(1))}"
在这里,我们所做的是使用MainViewModel
方法从getAllSourceItems()
对象createExpenseViewModel访问您的输入;
然后使用方法createExpenseActivityConverter
将它传递给另一个类getExpenseCategoryListFromSource()
对象createExpenseConverter,它返回你的微调器所需的ArrayList<String>
。
编辑:
在DataBinding中使用LiveData
时,数据绑定编译器会像ObservableFields一样处理刷新数据。您需要做的就是将LifeCycleOwner
提供给数据绑定对象。
例如:
如果你的活动有ViewDataBinding
让我们说你使用你的ViewModel
在xml绑定中设置LiveData
的mActivityBinding,那么在设置你的ViewModel
后考虑设置LifecycleOwner
如下代码:
//Some Activity having data-binding
... onCreate() method of activity
mActivityBinding.setViewModel(myViewModel);
mAcivityBinding.setLifecycleOwner(this); // Providing this line will help you observe LiveData changes from ViewModel in data-binding.
...
请参阅here
以上是关于如何将参数传递给数据绑定中的函数?的主要内容,如果未能解决你的问题,请参考以下文章