Android应用启动失败(Gradle构建成功):Resources$NotFoundException求助
问题描述
Gradle构建成功,但应用启动直接崩溃,报错信息如下:
2022-12-25 23:19:31.550 11731-11731/com.example.gonews E/AndroidRuntime: FATAL EXCEPTION: main Process: com.example.gonews, PID: 11731 android.content.res.Resources$NotFoundException: Resource ID #0x7f08015a type #0x12 is not valid
对应的RecyclerView适配器代码:
package com.example.gonews import android.annotation.SuppressLint import android.view.LayoutInflater import android.view.View import android.view.ViewGroup import android.widget.TextView import androidx.recyclerview.widget.RecyclerView class Newsadaptor(val i:ArrayList<String>): RecyclerView.Adapter<newsview>() { @SuppressLint("ResourceType") override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): newsview { val view=LayoutInflater.from(parent.context).inflate(R.id.rview,parent,false) return newsview(view) } override fun onBindViewHolder(holder: newsview, position: Int) { val crritem=i[position] holder.t.text=crritem } override fun getItemCount(): Int { return i.size } } class newsview(itemView: View) : RecyclerView.ViewHolder(itemView) { val t:TextView=itemView.findViewById(R.id.t1) }
修复方案
- 问题根源:
LayoutInflater.inflate()方法第一个参数传错了——你传入了控件ID(R.id.rview),但该方法要求传入布局文件的资源ID(R.layout.xxx)。而@SuppressLint("ResourceType")注解屏蔽了编译器的类型检查警告,导致问题到运行时才暴露。 - 修复步骤:
- 删除
@SuppressLint("ResourceType")注解,让编译器帮你拦截资源类型错误。 - 将
inflate(R.id.rview, parent, false)中的R.id.rview替换为RecyclerView列表项的布局文件ID,比如你的列表项布局是item_news.xml,就改成R.layout.item_news。 - 确认列表项布局文件中存在ID为
t1的TextView,避免后续出现空指针异常。
- 删除
修复后的onCreateViewHolder示例:
override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): newsview { val view = LayoutInflater.from(parent.context).inflate(R.layout.item_news, parent, false) return newsview(view) }
内容的提问来源于stack exchange,提问作者Anmol Gaur
相关产品推荐
相关产品推荐

