kotlin实现下拉三级联动代码和布局
时间: 2024-05-09 12:15:44 浏览: 209
下拉三级联动指的是三个下拉框之间存在关联,选择一个下拉框的选项会影响到另外两个下拉框的选项。下面是 Kotlin 实现下拉三级联动的代码和布局。
布局文件 `activity_main.xml`:
```xml
<RelativeLayout
xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
android:id="@+id/activity_main"
android:layout_width="match_parent"
android:layout_height="match_parent">
<!-- 第一级下拉框 -->
<Spinner
android:id="@+id/spinner1"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginTop="16dp"
android:padding="8dp"
android:spinnerMode="dropdown" />
<!-- 第二级下拉框 -->
<Spinner
android:id="@+id/spinner2"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_below="@id/spinner1"
android:layout_marginTop="16dp"
android:padding="8dp"
android:spinnerMode="dropdown" />
<!-- 第三级下拉框 -->
<Spinner
android:id="@+id/spinner3"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_below="@id/spinner2"
android:layout_marginTop="16dp"
android:padding="8dp"
android:spinnerMode="dropdown" />
</RelativeLayout>
```
Kotlin 代码 `MainActivity.kt`:
```kotlin
class MainActivity : AppCompatActivity() {
private lateinit var spinner1: Spinner
private lateinit var spinner2: Spinner
private lateinit var spinner3: Spinner
private lateinit var adapter1: ArrayAdapter<String>
private lateinit var adapter2: ArrayAdapter<String>
private lateinit var adapter3: ArrayAdapter<String>
private val data1 = arrayOf("省1", "省2", "省3")
private val data2 = arrayOf(
arrayOf("市1-1", "市1-2", "市1-3"),
arrayOf("市2-1", "市2-2", "市2-3"),
arrayOf("市3-1", "市3-2", "市3-3")
)
private val data3 = arrayOf(
arrayOf(
arrayOf("区1-1-1", "区1-1-2", "区1-1-3"),
arrayOf("区1-2-1", "区1-2-2", "区1-2-3"),
arrayOf("区1-3-1", "区1-3-2", "区1-3-3")
),
arrayOf(
arrayOf("区2-1-1", "区2-1-2", "区2-1-3"),
arrayOf("区2-2-1", "区2-2-2", "区2-2-3"),
arrayOf("区2-3-1", "区2-3-2", "区2-3-3")
),
arrayOf(
arrayOf("区3-1-1", "区3-1-2", "区3-1-3"),
arrayOf("区3-2-1", "区3-2-2", "区3-2-3"),
arrayOf("区3-3-1", "区3-3-2", "区3-3-3")
)
)
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_main)
spinner1 = findViewById(R.id.spinner1)
spinner2 = findViewById(R.id.spinner2)
spinner3 = findViewById(R.id.spinner3)
adapter1 = ArrayAdapter(this, android.R.layout.simple_spinner_item, data1)
adapter1.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item)
spinner1.adapter = adapter1
adapter2 = ArrayAdapter(this, android.R.layout.simple_spinner_item, data2[0])
adapter2.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item)
spinner2.adapter = adapter2
adapter3 = ArrayAdapter(this, android.R.layout.simple_spinner_item, data3[0][0])
adapter3.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item)
spinner3.adapter = adapter3
spinner1.onItemSelectedListener = object : AdapterView.OnItemSelectedListener {
override fun onItemSelected(
parent: AdapterView<*>?, view: View?, position: Int, id: Long
) {
adapter2.clear()
adapter2.addAll(data2[position])
adapter3.clear()
adapter3.addAll(data3[position][0])
}
override fun onNothingSelected(parent: AdapterView<*>?) {}
}
spinner2.onItemSelectedListener = object : AdapterView.OnItemSelectedListener {
override fun onItemSelected(
parent: AdapterView<*>?, view: View?, position: Int, id: Long
) {
adapter3.clear()
adapter3.addAll(data3[spinner1.selectedItemPosition][position])
}
override fun onNothingSelected(parent: AdapterView<*>?) {}
}
}
}
```
在 `onCreate()` 方法中,我们首先初始化了三个下拉框 `spinner1`、`spinner2` 和 `spinner3`,以及它们对应的适配器 `adapter1`、`adapter2` 和 `adapter3`。然后分别设置了 `spinner1`、`spinner2` 和 `spinner3` 的适配器,并初始化了它们的数据源。
接下来,我们分别设置了 `spinner1` 和 `spinner2` 的 `onItemSelectedListener` 事件,当用户选择了 `spinner1` 中的一个选项时,会清空 `adapter2` 中的数据,然后根据选中项的索引更新 `adapter2` 中的数据,并清空 `adapter3` 中的数据,然后根据选中项的索引和 `spinner2` 中的选中项的索引更新 `adapter3` 中的数据。当用户选择了 `spinner2` 中的一个选项时,会清空 `adapter3` 中的数据,然后根据 `spinner1` 中的选中项的索引和 `spinner2` 中的选中项的索引更新 `adapter3` 中的数据。
这样就实现了下拉三级联动的功能。
阅读全文