如何在 Android Studio (kotlin) 的同一个 activity 中管理 2 个下拉菜单
how to manage 2 dropdowns in the same activity in Android Studio (kotlin)
我有一个使用 2 个下拉菜单的项目。
第一个是建筑物
第二个是建筑物内的公寓号。
因此,当我们 select 建筑物和公寓号码时,我们得到所有者姓名。
我在 strings.xml
中创建了列表
<!-- LIST buildings-->
<string-array name="list_buildings">
<item>Building 1</item>
<item>Building 3</item>
<item>Building 3</item>
</string-array>
<!-- LIST Houses-->
<string-array name="list_houses">
<item>House 1</item>
<item>House 2</item>
<item>House 3</item>
</string-array>
我在 MainActivity.kt
中尝试过
// buildings
// list in strings.xml
val buildings = resources.getStringArray(R.array.list_buidings)
val buldingAdapter = ArrayAdapter(
this,
R.layout.dropdown_buildings,
buildings
)
// Houses
val houses = resources.getStringArray(R.array.list_houses)
val houseAdapter = ArrayAdapter(
this,
R.layout.dropdown_llamadas,
houses
)
// ▼ id from AutoCompleteTextViews
// in activity_main.xml
with(binding.chooseBuilding) {
setAdapter(arrayAdapter)
onItemClickListener = this@MainActivity
}
/
with(binding.chooseHouse) {
setAdapter(houseAdapter)
// LISTENERS
onItemClickListener = this@MainActivity
}
}
override fun onItemClick(parent: AdapterView<*>?, view: View?, position: Int, id: Long) {
val item = parent?.getItemAtPosition(position).toString()
// this is to test if dropdowns are working. OK
// the problem is I can´t separate both dropdowns
Toast.makeText(this@MainActivity, item, Toast.LENGTH_SHORT).show()
// I get error trying to change the "item" element to customize the logic.
if ( (item == "Building 1") || (item == "House 2" ) && (binding.chooseBuilding.isSelected)) {
binding.myTextView.text = "Katerine lives here..."
}
感谢您的帮助
首先,如果您使用的是 Spinner,那么您应该使用 onItemSelectedListener
而不是 onItemClickListener
onItemSelectedListener = this@MainActivity
其次,您可以简单地通过使用覆盖函数中的 parent
变量来分隔两个下拉菜单,如下所示:
override fun onItemSelected(parent: AdapterView<*>, view: View, position: Int, id: Long) {
var building = ""
var houses = ""
if (parent == binding.chooseBuilding) {
building = parent.getItemAtPosition(position).toString()
} else if (parent == binding.chooseHouse) {
houses = parent.getItemAtPosition(position).toString()
}
if ((building == "Building 1") || (houses == "House 2") && (binding.chooseBuilding.isSelected)) {
Log.d("TAG", "Katerine lives here...")
}
}
我有一个使用 2 个下拉菜单的项目。 第一个是建筑物 第二个是建筑物内的公寓号。 因此,当我们 select 建筑物和公寓号码时,我们得到所有者姓名。
我在 strings.xml
中创建了列表<!-- LIST buildings-->
<string-array name="list_buildings">
<item>Building 1</item>
<item>Building 3</item>
<item>Building 3</item>
</string-array>
<!-- LIST Houses-->
<string-array name="list_houses">
<item>House 1</item>
<item>House 2</item>
<item>House 3</item>
</string-array>
我在 MainActivity.kt
中尝试过// buildings
// list in strings.xml
val buildings = resources.getStringArray(R.array.list_buidings)
val buldingAdapter = ArrayAdapter(
this,
R.layout.dropdown_buildings,
buildings
)
// Houses
val houses = resources.getStringArray(R.array.list_houses)
val houseAdapter = ArrayAdapter(
this,
R.layout.dropdown_llamadas,
houses
)
// ▼ id from AutoCompleteTextViews
// in activity_main.xml
with(binding.chooseBuilding) {
setAdapter(arrayAdapter)
onItemClickListener = this@MainActivity
}
/
with(binding.chooseHouse) {
setAdapter(houseAdapter)
// LISTENERS
onItemClickListener = this@MainActivity
}
}
override fun onItemClick(parent: AdapterView<*>?, view: View?, position: Int, id: Long) {
val item = parent?.getItemAtPosition(position).toString()
// this is to test if dropdowns are working. OK
// the problem is I can´t separate both dropdowns
Toast.makeText(this@MainActivity, item, Toast.LENGTH_SHORT).show()
// I get error trying to change the "item" element to customize the logic.
if ( (item == "Building 1") || (item == "House 2" ) && (binding.chooseBuilding.isSelected)) {
binding.myTextView.text = "Katerine lives here..."
}
感谢您的帮助
首先,如果您使用的是 Spinner,那么您应该使用 onItemSelectedListener
而不是 onItemClickListener
onItemSelectedListener = this@MainActivity
其次,您可以简单地通过使用覆盖函数中的 parent
变量来分隔两个下拉菜单,如下所示:
override fun onItemSelected(parent: AdapterView<*>, view: View, position: Int, id: Long) {
var building = ""
var houses = ""
if (parent == binding.chooseBuilding) {
building = parent.getItemAtPosition(position).toString()
} else if (parent == binding.chooseHouse) {
houses = parent.getItemAtPosition(position).toString()
}
if ((building == "Building 1") || (houses == "House 2") && (binding.chooseBuilding.isSelected)) {
Log.d("TAG", "Katerine lives here...")
}
}