是否可以使用微调器在相同的 android 活动中添加列表视图

Posted

技术标签:

【中文标题】是否可以使用微调器在相同的 android 活动中添加列表视图【英文标题】:Is it possible to add a listview in same android activity with a spinner 【发布时间】:2020-09-01 06:33:47 【问题描述】:

我有一个 android 项目。当我在 android 活动中添加一个微调器时,它可以工作,但是当我添加一个列表视图以显示每个国家的城市时它不起作用。

我需要帮助。我希望当我点击微调器时,国家项目在下面单独显示相同国家城市的列表视图。

这里是 kotlin 代码:

import androidx.appcompat.app.AppCompatActivity
import android.os.Bundle
import android.view.View
import android.widget.AdapterView
import android.widget.ArrayAdapter
import android.widget.TextView

import kotlinx.android.synthetic.main.activity_second.*

class SecondActivity : AppCompatActivity() 

    var countryData = arrayOf("Algeria", "Palestine", "Jordan", "Iraq", "Syria")
    lateinit var data: String

    var algData = arrayOf("Algiers", "Oran", "Annaba")
    var palData = arrayOf("Jerusalem", "Gaza", "Nablus")
    var jorData = arrayOf("Amman", "Aqaba", "Zarqa")
    var irqData = arrayOf("Baghdad", "Mosul", "Basra")
    var syrData = arrayOf("Damascus", "Aleppo", "Lattakia")

    lateinit var countryAd: ArrayAdapter<String>

    lateinit var citiesAd: ArrayAdapter<String>

    override fun onCreate(savedInstanceState: Bundle?) 
        super.onCreate(savedInstanceState)
        setContentView(R.layout.activity_second)


        countryAd = ArrayAdapter(this, android.R.layout.simple_spinner_item, countryData)
        spinner.adapter = countryAd
        spinner.onItemSelectedListener = object : AdapterView.OnItemSelectedListener 
            override fun onNothingSelected(parent: AdapterView<*>?) 

            

            override fun onItemSelected(
                parent: AdapterView<*>?,
                view: View?,
                position: Int,
                id: Long
            ) 
                val txt = view as TextView
                if (txt ==Algeria) 
                    data = algData
                

            
        

        citiesAd = ArrayAdapter(this, android.R.layout.simple_list_item_1, data)
        listview.adapter = citiesAd
        listview.onItemClickListener = object : AdapterView.OnItemClickListener 
            override fun onItemClick(
                parent: AdapterView<*>?,
                view: View?,
                position: Int,
                id: Long
            ) 

            
        

    


【问题讨论】:

【参考方案1】:

好的,很简单,把你的list代码放在某个方法里面,然后从spinner的onItemSelectedListener中调用这个方法。

参考这个:

private fun setCityList()

     citiesAd = ArrayAdapter(this, android.R.layout.simple_list_item_1, data)
     listview.adapter = citiesAd


现在调用这个方法 onItemSelectedListener

spinner.onItemSelectedListener = object : AdapterView.OnItemSelectedListener 
        override fun onNothingSelected(parent: AdapterView<*>?) 

        

        override fun onItemSelected(
            parent: AdapterView<*>?,
            view: View?,
            position: Int,
            id: Long
        ) 
            val txt = view as TextView

            when(txt.text)
                "Algeria" -> data = algData
                "Palestine" -> data = palData 
                "Jordan" -> data = jorData 
                "Iraq" -> data = irqData 
                "Syria" -> data = syrData 
            

            //notice this                 
            setCityList()
        
    

希望这会有所帮助。

【讨论】:

首先谢谢...但我仍然收到错误(以下函数都不能使用提供的参数调用),ArrayAdapter 上有红色下划线 你能用你在代码中所做的更改更新你的帖子吗?

以上是关于是否可以使用微调器在相同的 android 活动中添加列表视图的主要内容,如果未能解决你的问题,请参考以下文章

自定义可搜索微调器在单击微调器时引发空指针异常

使用 Onitemselect 侦听器从微调器调用另一个活动。 [关闭]

Android微调器中的重复项目

如何根据两个不同活动中其他微调器的位置更改微调器的位置

浓缩咖啡:为啥旋转器在选择后不关闭?

Android - 如何在一个活动中禁用多个微调器的特定项目