【问题标题】:Android Kotlin does spinner_listener run through during initialize?Android Kotlin 在初始化期间是否会运行 spinner_listener?
【发布时间】:2021-05-03 19:43:27
【问题描述】:

我编写了一个 kotlin 应用程序,想知道为什么代码在初始化期间会通过侦听器运行。我尝试用我的代码来解释这个问题:

class MainActivity : AppCompatActivity() {
    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)

        findpath() 
        //check, if Dateien existieren, sonst create in function
        checkOrCreateFiles()

        binding = ActivityMainBinding.inflate(layoutInflater)
        var view = binding.root
        setContentView(view) //R.layout.activity_main)
        val cadapterk: ArrayAdapter<String> = ArrayAdapter<String>(
            this,
            android.R.layout.simple_spinner_item, myvokdirs
        )

        binding.spinnerKasten.adapter = cadapterk
        //binding.spinnerKasten.setSelection(0)  
        binding.spinnerKasten.onItemSelectedListener = object : AdapterView.OnItemSelectedListener {
            override fun onItemSelected(
                parent: AdapterView<*>,
                view: View,
                position: Int,
                id: Long
            ) {
                kastenselected = myvokdirs[position].toString()
                setnewpath(kastenselected)
            }

            override fun onNothingSelected(parent: AdapterView<*>) {
                kastenselected = myvokdirs[0]   
                
            }
        }

        binding.AuswahlContainer.isEnabled = false
        fileAktuell = boxes[0]   //dateiAkt
        checkAktuell = gut[0] // gutAkt
        readDatei(fileAktuell)
        binding.spinnerKasten.isEnabled = false
        // some addional code
    }

情况/问题

原则上,该代码有效。绑定没问题微调器“binding.spinnerkasten”没问题。关联的适配器“cadapterk”没问题,并显示了我的列表“myvokdirs”的数据。但是:

在初始化微调器期间,代码通过“setnewpath”运行。但“setnewpath”只能在选择微调器中的项目后使用。

如何避免在初始化期间触发“setnewpath”?看来,应用程序在 onCreate-function 期间通过侦听器运行。

有什么问题或我的误解是,代码已经在 init 中触发“setnewpath”,而不是仅在选择项目后触发?

我是否应该将它与 onCLickListener 结合使用?

(其他都正确。微调器出现在正确的位置,微调器显示正确的数据

【问题讨论】:

标签: android kotlin listener


【解决方案1】:

onItemSelected 总是在加载时调用,如果你不想在初始加载时运行某些东西,然后用布尔值括起来

var firstLoad = true

override fun onItemSelected(
            parent: AdapterView<*>,
            view: View,
            position: Int,
            id: Long
        ) {
            if(!firstLoad){
                kastenselected = myvokdirs[position].toString()
                setnewpath(kastenselected)
            }else{
                firstLoad = false
            }
        }

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-07-18
    • 2022-11-02
    • 2022-11-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多