由于 Kotlin 中的更新,如何在 oncreate 之外为 ListView 定义 ArrayAdapter?

how to define an ArrayAdapter for ListView outside oncreate due to update in Kotlin?

我尝试在 Kotlin 中更改 listItems 后让 ListView runnng 更新。 只要我留在 activity_main 内,我在这里找到的简单示例就可以正常工作。但是尝试更改函数中的项目我没有得到定义的适配器。

我的代码:

override fun onCreate(savedInstanceState: Bundle?) {
    super.onCreate(savedInstanceState)
    setContentView(R.layout.activity_main)
    // access the items of the list
    val adapter = ArrayAdapter(this,
        R.layout.mylistviewitem, array)
    //val listView: ListView = findViewById(R.id.listview_1)
    myslist.setAdapter(adapter)

有效并为我提供了正确的列表。

但是当我尝试更改函数中的数组时,我无法访问 "adapter",因此无法访问 "adapter.notifyDataSetChanged()" 我尝试使用一个简单的函数

fun myfkt() {    
    array[1]=" changed?"
    adapter.notifyDataSetChanged()
}

所以,问题是: 我如何在 onCreate (main)function

之外定义适配器

诸如

之类的东西
var myadapter = ArrayAdapter(this, R.Layout.mylistviewitem,array)

不工作。编译是 o.k,但应用程序立即崩溃 (我真的花了几个小时,但没有找到 Kotlin 的解决方案。从 java 中获取代码并自动转换为 Kotlin 的示例也没有用

将适配器的声明移到 onCreate 函数之外。然后您应该可以从 myfkt()

访问它
lateinit val adapter: ArrayAdapter

然后将您的 onCreate 声明更改为

adapter = ArrayAdapter(this, R.layout.mylistviewitem, array)

与您的问题无关,您应该考虑 RecyclerView。它比 ListView 好得多,因为它通过使用 ViewHolder 模式将良好的行为形式化。