Android开发问题:点击CardView跳转新Activity失败及报错排查
问题解决:CardView点击跳转Activity失败及报错修复
报错分析
当前存在两个关键报错:
Modifier 'override' is not applicable to 'local function':在onCreate方法内部尝试重写onViewCreated,局部函数不允许使用override修饰符Unresolved reference: activity:错误引用了不存在的activity变量,且Intent目标写错成Binding类而非Activity类
修复方案(无需替换为Button)
步骤1:正确重写onViewCreated方法
将onViewCreated从onCreate内部移到MainActivity类的顶层,作为类的成员方法重写。
步骤2:修正Intent跳转逻辑
- 用当前Activity实例(
this或MainActivity@this)替代activity变量 - 将Intent的目标类从
ActivityDashboardTmsBinding::class.java改为DashboardTmsActivity::class.java(Binding是布局绑定类,不是Activity)
修正后的MainActivity.kt代码
package com.cameron.armymaintenance import android.content.Intent import android.os.Bundle import android.view.View import androidx.cardview.widget.CardView import com.cameron.armymaintenance.databinding.ActivityMainBinding class MainActivity : DrawerBaseActivity() { private lateinit var binding: ActivityMainBinding override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) binding = ActivityMainBinding.inflate(layoutInflater) setContentView(binding.root) } // 正确重写onViewCreated,作为类成员方法 override fun onViewCreated(view: View, savedInstanceState: Bundle?) { super.onViewCreated(view, savedInstanceState) // 方式1:通过findViewById获取CardView view.findViewById<CardView>(R.id.card1).setOnClickListener { val intent = Intent(this@MainActivity, DashboardTmsActivity::class.java) startActivity(intent) } // 方式2:通过ViewBinding直接获取(更推荐) // binding.card1.setOnClickListener { // val intent = Intent(this@MainActivity, DashboardTmsActivity::class.java) // startActivity(intent) // } } }
补充说明
- 如果使用ViewBinding,直接通过
binding.card1获取控件比findViewById更简洁安全,注释部分提供了这种写法 - DrawerBaseActivity和DashboardTmsActivity的代码无需修改,保持原样即可
内容的提问来源于stack exchange,提问作者DCam
相关产品推荐
相关产品推荐

