Android开发ImageView ID引用报错且无导入选项问题求助
问题解决办法
你遇到的ID无法识别问题,是因为新版Android开发中已弃用Kotlin Android Extensions(即直接通过XML ID调用控件的方式),需要通过以下两种方案解决:
方案1:使用findViewById(无需额外配置,适合快速修改)
- 在MainActivity的
onCreate方法setContentView代码后,添加控件声明代码:
val abc = findViewById<ImageView>(R.id.abc)
- 在导入包区域新增ImageView的导入:
import android.widget.ImageView
之后就可以正常在代码中使用abc调用该ImageView。
方案2:使用官方推荐的View Binding(类型安全,无空指针风险)
- 第一步:开启View Binding配置,在你项目模块级的
build.gradle.kts(如果是Groovy语法则为build.gradle)文件中添加配置:
如果是KTS语法:
android { // 其他现有配置 buildFeatures { viewBinding = true } }
如果是Groovy语法:
android { // 其他现有配置 buildFeatures { viewBinding true } }
添加后点击右上角Sync Now同步项目配置。
- 第二步:修改MainActivity代码,使用绑定类调用控件:
假设你存放ImageView的布局文件名为activity_main.xml,对应的绑定类名为ActivityMainBinding,修改后代码如下:
import android.os.Bundle import androidx.appcompat.app.AppCompatActivity import com.android.volley.Request import com.android.volley.toolbox.JsonObjectRequest import com.android.volley.toolbox.Volley import com.bumptech.glide.Glide import android.widget.ImageView // 导入自动生成的绑定类,注意替换为自己项目的包名 import com.你的项目包名.databinding.ActivityMainBinding class MainActivity : AppCompatActivity() { private lateinit var binding: ActivityMainBinding override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) // 初始化绑定类 binding = ActivityMainBinding.inflate(layoutInflater) // 加载绑定类的根布局 setContentView(binding.root) // 你的业务逻辑代码 val jsonObjectRequest = JsonObjectRequest( Request.Method.GET, url, null, {response -> // 通过绑定类调用ImageView Glide.with(this).load(url).into(binding.abc) }, { }) // 将请求加入Volley请求队列 Volley.newRequestQueue(this).add(jsonObjectRequest) } }
注意事项
- 确认
setContentView加载的布局就是你定义ImageView的那个布局 - 确认导入的R类是你项目自身的R类,不是系统的
android.R
内容的提问来源于stack exchange,提问作者Saptarshi Ghosh
相关产品推荐
相关产品推荐

