我正在我的应用程序中创建一个表单,并且尝试使用双向数据绑定以避免最终单击按钮时手动填充对象。我可以轻松地通过编辑文本和字符串字段来完成此操作,但无法使其与微调器一起使用。
微调框是这样的:
<Spinner
android:id="@+id/species_spinner"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_margin="@dimen/simple_margin"
android:selectedItemPosition="@={speciesConverter.toInt(animal.species)}"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toBottomOf="@+id/textView3" />
转换器
class SpeciesConverter {
@InverseMethod("toSpecies")
fun toInt(species: Animal.Species) = species.ordinal
fun toSpecies(index: Int) = Animal.Species.values()[index]
}
活动:
class AnimalRegisterActivity : AppCompatActivity() {
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
val binding: ActivityAnimalRegisterBinding = DataBindingUtil.setContentView(this, R.layout.activity_animal_register)
species_spinner.adapter = generateStringAdapter(Animal.Species.values()
.map {
it.getPrettyString(this)
})
val animal = Animal()
binding.animal = animal
binding.executePendingBindings()
register_animal_button.setOnClickListener {
Log.i("REGISTER ANIMAL", animal.toString())
}
}
private fun generateStringAdapter(stringList: List<String>) =
ArrayAdapter(this,
android.R.layout.simple_spinner_item,
stringList)
.apply { setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item) }
}
Animal
species
字段是enum
。
有人知道怎么了吗?我发现的每个信息和示例都是这样。我不知道我在想什么。