我有一个ListView(单选模式),包含CheckedTextView项目(没有复选标记),我设置了适当的选择器来确定当前检查项目的文本颜色和背景颜色。
以下是:
当然,我需要摆脱这种眨眼效果,我认为这应该相当容易,但不幸的是,我无法弄清楚我做错了什么!
请注意,错误的闪烁效果仅发生在预先Honeycomb版本的Android上(我在仿真器和物理设备上都检查了这一点。)
我已经搜遍了整个网络和Stack Overflow以寻找答案,所以请不要向我发现现有的类似帖子(除非他们真的解决了我的问题,当然......)。
在下文中,您可以找到重现上述问题所需的所有代码。
活动(是的,它是兼容性库的FragmentActivity,但我认为这并不重要):
import android.os.Bundle;
import android.support.v4.app.FragmentActivity;
import android.widget.ArrayAdapter;
import android.widget.ListView;
public class TempListActivity extends FragmentActivity{
@Override
protected void onCreate(Bundle icicle) {
super.onCreate(icicle);
setContentView(R.layout.temp_list);
ListView listView = (ListView) findViewById(R.id.tempListView);
String[] array = new String[] { "one", "two", "three" };
ArrayAdapter<String> arrayAdapter = new ArrayAdapter<String>(this, R.layout.temp_list_item, array);
listView.setAdapter(arrayAdapter);
}
}
ListView:
<ListView xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/tempListView"
android:choiceMode="singleChoice"
android:layout_width="fill_parent"
android:layout_height="fill_parent">
</ListView>
CheckedTextView用作ListView项目:
<CheckedTextView
xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/list_item_title"
android:height="?android:attr/listPreferredItemHeight"
android:textColor="@drawable/list_item_text_custom"
android:background="@drawable/list_item_custom"
android:layout_width="fill_parent"
android:layout_height="wrap_content" />
文本颜色选择器(list_item_text_custom.xml):
<selector
xmlns:android="http://schemas.android.com/apk/res/android">
<item android:state_checked="true"
android:color="#000000">
</item>
<item android:state_pressed="true"
android:color="#000000">
</item>
<item android:state_selected="true"
android:color="#000000">
</item>
<item
android:color="#ffffff">
</item>
</selector>
背景颜色选择器(list_item_custom.xml):
<selector
xmlns:android="http://schemas.android.com/apk/res/android">
<item android:state_checked="true"
android:drawable="@drawable/highlighted_item_background">
</item>
<item android:state_pressed="true"
android:drawable="@drawable/highlighted_item_background">
</item>
<item android:state_selected="true"
android:drawable="@drawable/highlighted_item_background">
</item>
<item
android:drawable="@drawable/normal_item_background">
</item>
</selector>
突出显示背景的drawable(highlighted_item_background.xml):
<shape
xmlns:android="http://schemas.android.com/apk/res/android">
<solid android:color="#ff0000" />
</shape>
普通背景的drawable(normal_item_background.xml):
<shape
xmlns:android="http://schemas.android.com/apk/res/android">
<solid android:color="#000000" />
</shape>
我真的想利用标准的Android选择器机制,而不是被迫找出一些奇特的解决方法,所以如果我在上面的代码中犯了任何错误,请告诉我。
否则,非常感谢任何帮助或替代解决方案。
提前致谢。
答案 0 :(得分:0)
我一直无法为您找到真正的解决方案,但如果我们简化您所拥有的解决方案,也许我们可以找到一些可以接受的东西,作为您喜欢和需要之间的妥协:
<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android">
<item android:state_checked="false"
android:drawable="@drawable/normal_item_background">
</item>
<item
android:drawable="@drawable/highlighted_item_background">
</item>
</selector>
基本上我们会默认选中这个选项,并且只在项目取消选中时将其设置为正常。