#android #kotlin #android-arrayadapter
#Android #kotlin #android-arrayadapter
Вопрос:
Я новичок в Kotlin, у меня есть два действия: первая страница вызывает вторую страницу, затем вторая страница завершается и сохраняет данные в таблицу. В первом действии listview заполняется из той же таблицы. Я подумал, что способ сделать это — переопределить onResume и вызвать ArrayAdapter.notifyDataSetChanged().
Однако я не могу понять, как переместить мою локальную переменную ArrayAdapter, чтобы она стала глобальной переменной.
val adapter = ArrayAdapter(this, android.R.layout.simple_list_item_1, arrayList)
Есть ли лучший способ сделать это? Может быть, переопределение метода onActivityResult? Но все еще не уверен, что это лучший подход
Ответ №1:
если таблица не является базой данных, а просто намерением держателя данных, лучше всего переопределить onActivityResult
override fun onActivityResult(requestCode: Int, resultCode: Int, data: Intent?) {
super.onActivityResult(requestCode, resultCode, data)
}
также
вы можете легко сделать свой адаптер глобальным с помощью поздней инициализации
lateinit var adapter: ArrayAdapter<YourModel>
Комментарии:
1. Я пробовал это, но он сообщает мне: «Ожидается один аргумент типа для класса …», мне просто передать ему те же параметры снова? За исключением, может быть, nullarray вместо списка?
2. @user9333933 ошибка возникает из-за того, что ArrayAdapter является универсальным, вам нужно явно задать его тип, который вам нужен, чтобы передать вашу модель, например
lateinit var adapter: ArrayAdapter<String>
3. По какой-то причине мой listview не обновлялся, поэтому я просто переместил весь свой код в метод onResume, и теперь он работает, и я удалил notifydatasetchanged, потому что я просто инициализирую свой адаптер в onResume