我的Android应用程序中的资源有一个奇怪的问题。我有一个ListView
,我根据项目的状态设置元素的背景。我在getView
- 我的适配器的方法(tv
是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,例如here。我的问题很相似,但在一些细节上有所不同。 始终为我的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
是一个整数,由某个时间的视图设置。然后该项目应该看起来突出显示,这在模拟器上工作正常。它显示drawable-hdpi文件夹的图像icon_toolbox
。它不是list_selector_background
drawable的一部分,它看起来像这样:
<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" />
答案 0 :(得分:0)
在评论部分之后:
我认为你有干扰方法,它们都影响TextView
- 你正在谈论的那个onClick
,第二个是状态选择器,来自上面的代码。
据我所知,android.R.layout.simple_list_item_1
是默认值,因此当android.R%
文件出现问题时,所有R.java
内容都会被替换,这就是为什么它是我怀疑(如果它符合你的需要,那么好)。
但是,如果您为XML
定义TextView
(手动),则会在R.java
中定义,而不是在android.R
中定义...