我的 android 应用程序中的资源有一个奇怪的问题。我有一个ListView
根据项目状态设置元素背景的位置。我在getView
我的适配器的 -Method 中执行此操作(tv
is 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/transparent
。
list_selector_background_pressed
是一个 9-patch-image 并且也用作list_selector_background
按下状态。
在我的 Android 4.3 模拟器上一切正常。在我的 4.3 设备上也是如此。在我的 2.2 设备(支持的最低 API 版本)上,而不是list_selector_background
drawable,显示了 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_toolbox
drawable-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" />