【发布时间】:2019-09-30 11:27:35
【问题描述】:
如何在 MainActivity 中为 ListView 设置我的 ArrayAdapter 全局?
我的代码是:
class MainActivity : AppCompatActivity() {
var listItems = ArrayList<String>()
private var listAdapter: ArrayAdapter<String>? = null
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_main)
setSupportActionBar(toolbar)
listAdapter = ArrayAdapter(
this,
android.R.layout.simple_list_item_1,
listItems
)
listfield.adapter = listAdapter
listAdapter.add("Hello World!")
listAdapter.add("RFID app")
所以问题是这会在编译时出错: 智能转换为 ArrayAdapter 是不可能的,因为 'listAdapter' 是一个可变属性,此时可能已更改。 这是因为在调用 .Add 时无法知道另一个线程是否将 listAdapter 设置回 null。
我需要 listAdapter 是全局的,因为我需要从回调函数调用 .notifyDataSetChanged() (当条形码阅读器读取条形码时),如果我在 onCreate() 中声明 listAdapter 它是不可用于回调函数。所以它必须是一个属性。 Kotlin 抱怨一个属性必须要么被初始化要么被声明为“抽象”。显然“抽象”在这里不起作用,但我不能将它初始化为“null”以外的其他东西,因为初始化需要上下文并且上下文在 onCreate() 之前不可用。 在 Kotlin 中如何解决这个问题?
【问题讨论】: