You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Vector Drawable在Activity正常但RecyclerView中崩溃问题求助

解决Recycler Adapter中Vector Drawable加载崩溃的问题

这个问题我之前帮不少开发者排查过,结合你已经做的尝试,咱们从几个关键点再梳理下:

  • 确保Adapter中使用的Context有效且正确
    你提到传递了Activity引用给Adapter,但要注意:如果Activity已经进入销毁状态,这个引用可能会失效甚至引发内存泄漏。更稳妥的方式是在onBindViewHolder中通过holder.itemView.getContext()获取当前有效的Context,再调用ContextCompat.getDrawable():

    Drawable drawable = ContextCompat.getDrawable(holder.itemView.getContext(), R.drawable.ic_home_team);
    holder.ivTeam.setImageDrawable(drawable);
    

    另外,别用Application Context来加载Vector Drawable——它没有关联Activity的主题,可能导致资源解析失败。

  • 检查Vector Drawable文件的语法规范
    报错里提到的res/drawable/test.xml可能存在语法问题:AndroidX环境下,Vector Drawable的核心属性要使用app命名空间,而不是android命名空间。比如:

    <vector xmlns:android="http://schemas.android.com/apk/res/android"
            xmlns:app="http://schemas.android.com/apk/res-auto"
            app:viewportWidth="24"
            app:viewportHeight="24"
            android:width="24dp"
            android:height="24dp">
        <path app:pathData="M12..." android:fillColor="@color/black"/>
    </vector>
    

    如果误用了android:前缀的viewportWidth/pathData等属性,就可能在非Activity场景下解析失败。

  • 调整AppCompatDelegate的初始化时机
    你在Adapter里加静态代码块的方式可能时机不对,建议把AppCompatDelegate.setCompatVectorFromResourcesEnabled(true);移到自定义Application类的onCreate()方法中,确保App启动时就开启Vector Drawable兼容:

    public class MyApp extends Application {
        @Override
        public void onCreate() {
            super.onCreate();
            AppCompatDelegate.setCompatVectorFromResourcesEnabled(true);
        }
    }
    

    别忘了在AndroidManifest.xml里指定这个Application类。

  • 替换为AppCompatImageView
    把Recycler Item布局里的普通ImageView换成androidx.appcompat.widget.AppCompatImageView,它对Vector Drawable的兼容支持更完善。之后可以直接调用setImageResource(),无需手动获取Drawable:

    holder.ivTeam.setImageResource(R.drawable.ic_home_team);
    

    AppCompatImageView会自动处理Vector Drawable的适配,避免Context相关的问题。

  • 排查资源引用的一致性
    确认Adapter中引用的Drawable ID(比如R.drawable.ic_home_team)和你实际的资源文件名完全一致,Android系统对资源文件名大小写敏感,别出现文件名和引用不匹配的情况。

内容的提问来源于stack exchange,提问作者dev90

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.14 08:37:15