如何将数据从AutoCompleteTextView传递到ViewModel?

问题描述 投票:0回答:2

我需要将点击对象的ID从AutoCompleteTextView传递给ViewModel。在这里,我有一个绑定适配器,用于为AutoCompleteTextView的对象设置微调器。

@BindingAdapter("bindAutocomplete")
fun bindAutocomplete(textView: AutoCompleteTextView, cities: List<City>?){
 cities?.let {
    val adapter = ArrayAdapter<City>(
    textView.context,
    R.layout.support_simple_spinner_dropdown_item,
    it)

    textView.setAdapter(adapter)
 }
}  

我的问题是:应将OnItemClickListener放在下面的此适配器中,还是放在Fragment类中,如下面的代码中?

第一种方法的问题是,我不知道如何从绑定适配器访问ViewModel。第二,如果我将这个侦听器放在Fragment类中,是不是会破坏模式,因为Biniding Adapter和OnItemClickListener的初始化未同步?

所以我需要将city.id传递给ViewModel中的某些方法。

binding.autoCompleteTextView.setOnItemClickListener { parent, view, position, id ->
        val city = parent.adapter.getItem(position) as City
        binding.viewModel.getWeatherProperties(city.id)
}    
android mvvm data-binding viewmodel autocompletetextview
2个回答
0
投票

您可以使用以下两种方式进行数据绑定,以将数据传递给viewmodel。

 <AutoCompleteTextView  
    android:id="@+id/autoCompleteTextView"  
    android:layout_width="200dp"  
    android:layout_height="wrap_content"  
    android:layout_marginLeft="92dp"  
    android:layout_marginTop="144dp"  
    android:text="@={viewmodel.rememberMe}"  
    app:layout_constraintStart_toStartOf="parent"  
    app:layout_constraintTop_toTopOf="parent" />  

0
投票

因此,我仅通过使用观察者即可解决此任务,我不确定此处是否甚至可以对AutoCompleteTextView使用双向绑定。可能是因为SetOnItemClickListener不支持双向数据绑定的内置支持。

© www.soinside.com 2019 - 2024. All rights reserved.