android - ResourceNotFoundException android kitkat
问题描述
我有一个回收站视图。在它的适配器中,这就是我所拥有的:
@Override
public void onBindViewHolder(@NonNull ViewHolder holder, final int position) {
//gradient is my arraylist that contains resource IDs. these are set in my fragment class
int res = gradient.get(position);
holder.parent.setBackground(ContextCompat.getDrawable(Application.getAppContext(), res));
}
在我的片段中,我将这些资源 ID 传递给适配器:
final ArrayList<Integer> gradients = new ArrayList<>();
gradients.clear();
gradients.add(R.drawable.gradient);
gradients.add(R.drawable.gradientgray);
gradients.add(R.drawable.gradient2);
RecyclerViewAdapter adapter = new RecyclerViewAdapter(gradients) //it has a constructor that gets the arraylist and sets it to the arraylist in adapter class.
recyclerView.setLayoutManager(new LinearLayoutManager(getContext()));
recyclerView.setAdapter(adapter);
它适用于 android > 4.4,但它在 android 4.4 上因 ResourceNotFound 异常而崩溃。
编辑: 堆栈跟踪:
FATAL EXCEPTION: main
Process: example.myapp, PID: 1652
android.content.res.Resources$NotFoundException: Resource ID #0x7f070074
at android.content.res.Resources.getValue(Resources.java:1123)
at android.content.res.Resources.getDrawable(Resources.java:698)
at androidx.core.content.ContextCompat.getDrawable(ContextCompat.java:456)
at example.myapp.ui.dashboard.DashboardRecycler.onBindViewHolder(DashboardRecycler.java:62)
at example.myapp.ui.dashboard.DashboardRecycler.onBindViewHolder(DashboardRecycler.java:22)
at androidx.recyclerview.widget.RecyclerView$Adapter.onBindViewHolder(RecyclerView.java:7065)
at androidx.recyclerview.widget.RecyclerView$Adapter.bindViewHolder(RecyclerView.java:7107)
at androidx.recyclerview.widget.RecyclerView$Recycler.tryBindViewHolderByDeadline(RecyclerView.java:6012)
at androidx.recyclerview.widget.RecyclerView$Recycler.tryGetViewHolderForPositionByDeadline(RecyclerView.java:6279)
at androidx.recyclerview.widget.RecyclerView$Recycler.getViewForPosition(RecyclerView.java:6118)
at androidx.recyclerview.widget.RecyclerView$Recycler.getViewForPosition(RecyclerView.java:6114)
at androidx.recyclerview.widget.LinearLayoutManager$LayoutState.next(LinearLayoutManager.java:2303)
at androidx.recyclerview.widget.LinearLayoutManager.layoutChunk(LinearLayoutManager.java:1627)
at androidx.recyclerview.widget.LinearLayoutManager.fill(LinearLayoutManager.java:1587)
at androidx.recyclerview.widget.LinearLayoutManager.onLayoutChildren(LinearLayoutManager.java:665)
at androidx.recyclerview.widget.RecyclerView.dispatchLayoutStep2(RecyclerView.java:4134)
at androidx.recyclerview.widget.RecyclerView.dispatchLayout(RecyclerView.java:3851)
at androidx.recyclerview.widget.RecyclerView.onLayout(RecyclerView.java:4404)
at android.view.View.layout(View.java:14817)
at android.view.ViewGroup.layout(ViewGroup.java:4631)
at androidx.constraintlayout.widget.ConstraintLayout.onLayout(ConstraintLayout.java:1915)
at android.view.View.layout(View.java:14817)
at android.view.ViewGroup.layout(ViewGroup.java:4631)
at android.widget.FrameLayout.layoutChildren(FrameLayout.java:453)
at android.widget.FrameLayout.onLayout(FrameLayout.java:388)
at android.view.View.layout(View.java:14817)
at android.view.ViewGroup.layout(ViewGroup.java:4631)
at androidx.constraintlayout.widget.ConstraintLayout.onLayout(ConstraintLayout.java:1915)
at android.view.View.layout(View.java:14817)
at android.view.ViewGroup.layout(ViewGroup.java:4631)
at android.widget.FrameLayout.layoutChildren(FrameLayout.java:453)
at android.widget.FrameLayout.onLayout(FrameLayout.java:388)
at android.view.View.layout(View.java:14817)
at android.view.ViewGroup.layout(ViewGroup.java:4631)
at androidx.appcompat.widget.ActionBarOverlayLayout.onLayout(ActionBarOverlayLayout.java:446)
at android.view.View.layout(View.java:14817)
at android.view.ViewGroup.layout(ViewGroup.java:4631)
at android.widget.FrameLayout.layoutChildren(FrameLayout.java:453)
at android.widget.FrameLayout.onLayout(FrameLayout.java:388)
at android.view.View.layout(View.java:14817)
at android.view.ViewGroup.layout(ViewGroup.java:4631)
at android.widget.LinearLayout.setChildFrame(LinearLayout.java:1671)
at android.widget.LinearLayout.layoutVertical(LinearLayout.java:1525)
at android.widget.LinearLayout.onLayout(LinearLayout.java:1434)
at android.view.View.layout(View.java:14817)
at android.view.ViewGroup.layout(ViewGroup.java:4631)
at android.widget.FrameLayout.layoutChildren(FrameLayout.java:453)
at android.widget.FrameLayout.onLayout(FrameLayout.java:388)
at android.view.View.layout(View.java:14817)
at android.view.ViewGroup.layout(ViewGroup.java:4631)
at android.view.ViewRootImpl.performLayout(ViewRootImpl.java:1983)
at android.view.ViewRootImpl.performTraversals(ViewRootImpl.java:1740)
at android.view.ViewRootImpl.doTraversal(ViewRootImpl.java:996)
at android.view.ViewRootImpl$TraversalRunnable.run(ViewRootImpl.java:5600)
at android.view.Choreographer$CallbackRecord.run(Choreographer.java:761)
可绘制对象之一:(它们都相同,但颜色不同)
<?xml version="1.0" encoding="UTF-8"?>
<gradient
android:endColor="@android:color/holo_green_dark"
android:startColor="@android:color/holo_green_light"
android:type="linear" />
<corners
android:radius="0dp"/>
Drawables 是这样的,只是它们的颜色不同。
我也尝试在recyclerView的适配器中设置不带arraylist的drawable(比如R.drawable.gradient而不是arraylist.get(position)),效果很好。但使用 arraylist 它可以在更高的 android 版本上正常工作。我知道使缓存失效是不相关的,但这也无济于事。
解决方案
我想通了!一些drawables就像“gradient2.xml(mdpi)”所以我删除了它们并为它们创建了一个新的xml文件。发生这种情况是因为我正在复制粘贴 xml 文件以创建一个新的 xml 文件。
推荐阅读
- wordpress - MaxMind GeoIP 在服务器之间是不同的(WordPress 插件)
- css - 如何折叠 div A 的右边框与 div B 的左边框以具有单边框
- html - 当我调整页面大小时,为什么我的元素会重叠。我正在使用百分比
- r - 将 XML 文件转换为 R 数据框并提取属性
- scala - intelliJ 2018.1.4 中的 sbt shell 与 sbt 控制台
- .net - 如何以毫秒精度和左填充格式化日期时间?
- c++ - 在单个 Linux 应用程序中使用(旧)libstdc++.so.5 和 libstdc++.so.6
- hibernate - 如何只导入 Hibernate 特定的注释,例如 @CreationTimestamp @UpdateTimestamp?
- canvas - 删除随机画布对象
- apostrophe-cms - 如何设计双语使用系统?