1

我的 android 应用程序中的资源有一个奇怪的问题。我有一个ListView根据项目状态设置元素背景的位置。我在getView我的适配器的 -Method 中执行此操作(tvis a TextView):

if (position == currentSelection - 1) {
    tv.setBackgroundResource(R.drawable.list_selector_background_pressed);
    tv.setTextColor(getContext().getResources().getColor(R.color.my_white));
}
else {
    tv.setBackgroundResource(R.drawable.list_selector_background);
    tv.setTextColor(getContext().getResources().getColor(R.color.text_color));
}

list_selector_background根据状态(按下、聚焦、禁用等)包含不同的项目。默认状态是@color/transparentlist_selector_background_pressed是一个 9-patch-image 并且也用作list_selector_background按下状态。

在我的 Android 4.3 模拟器上一切正常。在我的 4.3 设备上也是如此。在我的 2.2 设备(支持的最低 API 版本)上,而不是list_selector_backgrounddrawable,显示了 drawable-hdpi 中的不同图像。if 部分工作正常。问题只发生在代码的 else 部分。

我知道图书馆项目的问题和讨论的 ID 冲突,例如这里。我的问题很相似,但在一些细节上有所不同。它总是为我选择错误的背景,ListView而且总是相同的背景。有时,当我先打开不同的活动时会有所帮助。有时它不会。清洁没有用。完全卸载并再次安装不起作用

任何提示将不胜感激。

编辑

我的 getView 方法的完整源代码:

@Override
public View getView(int position, View convertView, ViewGroup parent) {
    View v = convertView;

    if (v == null) {
        LayoutInflater inflater = LayoutInflater.from(getContext());
        v = inflater.inflate(resource, null);
    }

    TextView tv = (TextView) v.findViewById(android.R.id.text1);
    tv.setText(getItem(position));

    if (position == currentSelection - 1) {
        tv.setBackgroundResource(R.drawable.list_selector_background_pressed);
        tv.setTextColor(getContext().getResources().getColor(R.color.my_white));
    }
    else {
        tv.setBackgroundResource(R.drawable.list_selector_background);
        tv.setTextColor(getContext().getResources().getColor(R.color.text_color));
    }

    return v;
}

currentSelection是一个整数,由视图在特定时间设置。然后该项目应该看起来突出显示,这在模拟器上工作正常。它显示icon_toolboxdrawable-hdpi 文件夹的图像。它不是list_selector_background可绘制对象的一部分,如下所示:

<item android:state_window_focused="false"
    android:drawable="@color/transparent" />

<!-- Even though these two point to the same resource, have two states so the drawable will invalidate itself when coming out of pressed state. -->
<item android:state_focused="true" android:state_enabled="false"
    android:state_pressed="true"
    android:drawable="@drawable/list_selector_background_disabled" />
<item android:state_focused="true" android:state_enabled="false"
    android:drawable="@drawable/list_selector_background_disabled" />

<item android:state_focused="true" android:state_pressed="true"
    android:drawable="@drawable/list_selector_background_transition" />
<item android:state_focused="false" android:state_pressed="true"
    android:drawable="@drawable/list_selector_background_transition" />

<item android:state_focused="true"
    android:drawable="@drawable/list_selector_background_focus" />

<item android:drawable="@color/transparent" />

4

1 回答 1

0

在评论部分之后:

我认为你有干扰方法,它们都会影响TextView- 一个是onClick你正在谈论的这个,第二个是状态选择器,来自上面的代码。据我所知,这android.R.layout.simple_list_item_1是一个默认设置,因此android.R%当您在文件中遇到问题时,有时会替换所有内容,这就是R.java为什么它对我来说是可疑的(如果它适合您的需要,那么可以)。

但是,如果您为 定义了XML(手动)TextView,那么它是在 中定义的R.java,而不是在android.R...

于 2013-09-27T13:28:17.817 回答