Android与Spinner的两种方式的数据绑定不起作用

时间:2018-07-29 00:28:11

标签: android kotlin android-databinding

我正在我的应用程序中创建一个表单,并且尝试使用双向数据绑定以避免最终单击按钮时手动填充对象。我可以轻松地通过编辑文本和字符串字段来完成此操作,但无法使其与微调器一起使用。

微调框是这样的:

<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

有人知道怎么了吗?我发现的每个信息和示例都是这样。我不知道我在想什么。

0 个答案:

没有答案