как определить ArrayAdapter для ListView вне oncreate из-за обновления в Kotlin? - PullRequest
0 голосов
/ 27 мая 2020

Я пытаюсь запустить ListView с обновлением после изменения listItems в Kotlin. Простые примеры, которые я нахожу здесь, работают, пока я остаюсь внутри 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)

работает и дает мне правильный список.

Но когда Я пытаюсь изменить массив в функции, у меня нет доступа к «адаптеру» и, следовательно, к «адаптеру.notifyDataSetChanged ()». Я пробую это с помощью простой функции

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

Итак, вопрос: как определить адаптер вне функции onCreate (main)

Такие вещи, как

var myadapter = ArrayAdapter(this, R.Layout.mylistviewitem,array)

, не работают. Компиляция в порядке, но приложение сразу вылетает (я действительно потратил часы, но не нашел решения для Kotlin. Взятие кода из java -примеров с автоматическим преобразованием в Kotlin тоже не сработало

1 Ответ

0 голосов
/ 27 мая 2020

Переместите объявление для адаптера за пределы вашей функции onCreate. Затем вы сможете получить к нему доступ из myfkt()

lateinit val adapter: ArrayAdapter

Затем измените свое объявление onCreate на

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

Не связано с вашим вопросом, вам следует подумать о RecyclerView. Это гораздо лучшая альтернатива, чем ListView, поскольку она формализует хорошее поведение за счет использования шаблона ViewHolder.

...