Android Kotlin微调器使用双向数据绑定在Textview中设置选定值
我试图从微调器中获取所选值,并使用双向数据绑定和可观察字符串将该值设置为我的TextView。 我尝试了以下代码,但无法在textview中设置所选项目的值Android Kotlin微调器使用双向数据绑定在Textview中设置选定值,android,kotlin,android-databinding,2-way-object-databinding,Android,Kotlin,Android Databinding,2 Way Object Databinding,我试图从微调器中获取所选值,并使用双向数据绑定和可观察字符串将该值设置为我的TextView。 我尝试了以下代码,但无法在textview中设置所选项目的值 <androidx.appcompat.widget.AppCompatSpinner android:layout_width="match_parent" android:layout_height="wrap_content" android:entries
<androidx.appcompat.widget.AppCompatSpinner
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:entries="@array/array_name"
android:id="@+id/spinner"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintHorizontal_bias="0.0"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent"
bind:selectedValue="@={viewModel.text.get()}"
/>
<TextView
app:layout_constraintTop_toBottomOf="@+id/spinner"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginTop="16dp"
android:hint="@string/submit"
android:text="@={viewModel.text.get()}"/>
使用反向绑定将微调器数据绑定到文本的绑定适配器
@BindingAdapter(value = ["selectedValue", "selectedValueAttrChanged"], requireAll = false)
fun bindSpinnerData(
pAppCompatSpinner: AppCompatSpinner,
newSelectedValue: String?,
newTextAttrChanged: InverseBindingListener
) {
pAppCompatSpinner.onItemSelectedListener = object : OnItemSelectedListener {
override fun onItemSelected(
parent: AdapterView<*>?,
view: View?,
position: Int,
id: Long
) {
newTextAttrChanged.onChange()
}
override fun onNothingSelected(parent: AdapterView<*>?) {}
}
if (newSelectedValue != null) {
val pos =
(pAppCompatSpinner.adapter as ArrayAdapter<String?>).getPosition(
newSelectedValue
)
pAppCompatSpinner.setSelection(pos, true)
}
}
@InverseBindingAdapter(attribute = "selectedValue", event = "selectedValueAttrChanged")
fun captureSelectedValue(pAppCompatSpinner: AppCompatSpinner): String? {
return pAppCompatSpinner.selectedItem as String
}
}
@BindingAdapter(value=[“selectedValue”,“selectedValueAttrChanged”],requireAll=false)
有趣的喷丝头数据(
pAppCompatSpinner:AppCompatSpinner,
newSelectedValue:字符串?,
newTextAttrChanged:InverseBindingListener
) {
pAppCompatSpinner.onItemSelectedListener=对象:onItemSelectedListener{
已选择“覆盖”选项(
家长:AdapterView?,
视图:视图?,
职位:Int,
id:长
) {
newTextAttrChanged.onChange()
}
覆盖未选择的乐趣(父项:AdapterView?{}
}
if(newSelectedValue!=null){
瓦尔波斯=
(pAppCompatSpinner.adapter作为阵列适配器)。获取位置(
新选择值
)
pAppCompatSpinner.setSelection(位置,真)
}
}
@InverseBindingAdapter(attribute=“selectedValue”,event=“selectedValueAttrChanged”)
有趣的captureSelectedValue(pAppCompatSpinner:AppCompatSpinner):字符串?{
返回pAppCompatSpinner.selectedItem作为字符串
}
}
视图模型
class SelectionViewModel: BaseViewModel<SelectionNavigator>() {
private var text: ObservableField<String>? = null
fun SelectionViewModel() {
text = ObservableField()
}
fun getText(): ObservableField<String>? {
return text
}
}
class SelectionViewModel:BaseViewModel(){
私有变量文本:ObservableField?=null
fun SelectionViewModel(){
text=observeField()
}
有趣的getText():ObservableField{
返回文本
}
}
语法不应该是@={}
而不是@=()
粘贴时我的错误,仍然面临着同样的问题。似乎从代码片段中看不到任何问题,我必须运行它并亲自查看,但是如果发现问题,请在此处编写答案。语法不应该是@={}
而不是=()
粘贴时我的错误,仍然面临着相同的问题。从代码片段中看不到任何问题,我必须运行它并亲自查看,但是如果发现问题,请在此处写出答案。