可绘制资源未找到。

15

我想为自定义的 ArrayAdapter 实现一个选择器可绘制资源。但是我不断地收到一个 android.content.res.Resources$NotFoundException: File res/drawable/list_selector.xml from drawable resource ID #0x7f020 的错误信息。

有人能提供一些建议吗?

我有两个 xml 文件:

res/drawable/list_selector.xml

<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android" >
    <item android:state_checked="true" android:color="@android:color/white" />
    <item android:state_checked="false" android:color="@android:color/black" />
</selector>

res/layout/list_item.xml

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="horizontal" >

    <TextView 
        android:id="@+id/casualty_text_view"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:background="@drawable/list_selector"/>

</LinearLayout>

最后,我的代码按如下方式加载列表项:

    public View getView(int position, View convertView, ViewGroup parent) {
        // TODO Auto-generated method stub
        TCCC cur_object = getItem(position);

        View cur_view = convertView;
        if(cur_view == null)
        {
            System.out.println("Inflating!");
            cur_view = View.inflate(getContext(), R.layout.list_item, null);
            String text_value = (cur_object.m_name.length() == 0) ? "New Casualty" : cur_object.m_name;

            TextView name_box = (TextView)cur_view.findViewById(R.id.casualty_text_view);
            if(name_box != null)
                name_box.setText(text_value);
        }

        return cur_view;
    }
5个回答

15

看看 @Nebraska 建议是否有帮助。

否则,请尝试这个:

<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android" >
    <item android:state_checked="true" android:drawable="@android:color/white" />
    <item android:state_checked="false" android:drawable="@android:color/black" />
</selector>

谢谢,drawable已经解决了。请删除逻辑建议,它与问题无关。 - Constantin
顺便问一下,你知道选择器是如何工作的吗?我正在尝试在运行时更改ListView项目的背景颜色。一种方法是使用setBackgroundColor()编程方式,这很容易并且有效。选择器(出乎意料地)也可以工作,但不正确。它没有设置正确的颜色。你有什么想法可以告诉我在哪里可以阅读有关视图膨胀的信息,换句话说,选择器只能在膨胀时静态使用还是可以持续使用?或者默认的getView()调用是否利用它们? - Constantin
@Constantin,您能定义一下您要寻找的内容吗?您希望列表项在哪些状态(或者说哪些状态的组合)下改变颜色? - Vikram
你可以使用在这里定义的状态 StateListDrawable编辑:关于 setItemChecked(),你是在 TextView 上调用它吗? - Vikram
5
将选择器中的android:color更改为android:drawable即可解决问题。谢谢! - Luis
显示剩余4条评论

4

首先,将它们放在hdpi文件夹中,然后清理项目。这将更新所有内容,错误应该会消失。


不幸的是,这并没有起作用。清理了项目,卸载了应用程序,但仍然出现相同的错误。 - Constantin
那些 android:color 的东西可能存在问题。 - verymessi
Constantin,你解决了这个问题吗? - Pat Long - Munkii Yebee

0

我遇到了类似的问题,通过删除一个 .xml drawable 文件顶部的空行,我成功地解决了它。


0
对我来说,困惑的是我已经将所有矢量图标替换为 PNG,除了一个,这就是失败的原因。确保检查引起问题的资源的所有实例,并确保一切都符合预期...

0

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接