【Android Studio】使用Binding代替R.layout.xxx显示kotlin.UninitializedPropertyAccessException(已解决)

初始代码:

class MainActivity : AppCompatActivity() {
    private lateinit var binding: ActivityMainBinding

    val datas = arrayOf("张三","李四","王五","麻子","小强")
    var adapter: ArrayAdapter<String>? = null

    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        setContentView(R.layout.activity_main)
        adapter = ArrayAdapter<String>(this,R.layout.layout_fruit_unit,datas)
        binding.root.ll1.adapter = adapter // 报错的位置
    }
}

报错:Caused by: kotlin.UninitializedPropertyAccessException: lateinit property binding has not been initialized
给我的感觉是这个binding没有被初始化,查了查web以为是setContentView用的还是R.layout

改1:失败

class MainActivity : AppCompatActivity() {
    private lateinit var binding: ActivityMainBinding
    val datas = arrayOf("张三","李四","王五","麻子","小强")
    var adapter: ArrayAdapter<String>? = null
    
    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        setContentView(binding.root) // 改了这里
        adapter = ArrayAdapter<String>(this,R.layout.layout_fruit_unit,datas)
        binding.root.ll1.adapter = adapter
    }
}

再看了看前辈的代码

改2:失败(逐渐变得离谱)

class MainActivity : AppCompatActivity() {
    private lateinit var binding: ActivityMainBinding
    val datas = arrayOf("张三","李四","王五","麻子","小强")
    var adapter: ArrayAdapter<String>? = null

    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        setContentView(binding.root)
        adapter = ArrayAdapter<String>(this,R.layout.layout_fruit_unit,datas)
        binding = ActivityMainBinding.inflate(LayoutInflater.from(this),ll1,false)
        binding.root.ll1.adapter = adapter
    }
}

之后看到了一篇overflow上的,感觉缺了类似这种的东西。

binding = DataBindingUtil.setContentView(this, R.layout.activity_quiz_question)

https://stackoverflow.com/questions/68558065/kotlin-lateinit-property-binding-has-not-been-initialized

感觉有戏
…10 min later…
我没有DataBingUtil,和这个人一样找不到呢…
只好一会儿问问师父了,让我先把昨天layout的问题做完。

改3:显示出来了

中午睡了个午觉,换了换脑子

class MainActivity : AppCompatActivity() {
    private lateinit var binding: ActivityMainBinding
    val datas = arrayOf("张三","李四","王五","麻子","小强")
    var adapter: ArrayAdapter<String>? = null
    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        binding = ActivityMainBinding.inflate(layoutInflater) // 缺失的是这一行
        setContentView(binding.root)
        binding.root.ll1.adapter = adapter
    }
}
  • 4
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值