原正常运行的Activity现抛出ActivityNotFoundException求助
这问题看起来有点诡异——明明你要启动的是Target Activity,系统却报错说找不到android.support.v7.widget.AppCompatButton这个“Activity”,而且你也确认了Target已经在Manifest里注册了对吧?别慌,这大概率是变量名冲突搞出来的乌龙,不是Manifest的问题。
问题根源分析
看你贴的点击事件代码:
Target.setOnClickListener { val intent = Intent(this, Target::class.java) startActivity(intent) }
这里的第一个Target如果是你在代码里定义的某个AppCompatButton实例(比如你写了val Target: AppCompatButton = findViewById(R.id.xxx)),那么当你写Target::class.java的时候,Kotlin会把它解析成这个按钮实例的类,而不是你要启动的Target Activity类!系统自然就会去Manifest里找AppCompatButton的注册,这肯定找不到啊。
具体解决步骤
- 修改变量名,区分实例和类:把按钮的变量名改成小写开头的名字(比如
targetBtn),避免和Activity类名(首字母大写的Target)重名。修改后代码应该是这样:targetBtn.setOnClickListener { val intent = Intent(this, Target::class.java) startActivity(intent) } - 明确指定Activity类的引用:如果还是担心混淆,可以直接用完整的包名来引用Activity类,确保指向正确:
val intent = Intent(this, com.hmadland.paranoia.Target::class.java) - 清理重建项目:有时候Android Studio的缓存会导致奇怪的解析问题,执行
Build -> Clean Project,然后Build -> Rebuild Project,再重新运行应用。
额外检查点
虽然你说没修改过Activity相关内容,但可以快速确认下:
TargetActivity的类名是不是真的叫Target,有没有不小心改了类名?- 有没有在Profile.kt里import了错误的类?比如不小心import了
android.support.v7.widget.AppCompatButton并把它命名成了Target?
内容的提问来源于stack exchange,提问作者hmad
相关产品推荐
相关产品推荐

