我的Android应用程序中有一个双色的ListView
(奇数元素为一种,偶数为一种)。它在Froyo上运行得很好。但是在Jelly Bean模拟器上,滚动期间会出现一些文物。一些元素的背景变黑。 是的,我知道透明缓存颜色提示的解决方案!但只有当我以这种方式设置背景时它才有效:
在适配器的方法bindView()
中:
// ...
view.setBackgroundResource(
cursor.getPosition() % 2 == 0 ? R.color.list_item_bg1: R.color.list_item_bg2);
但是这个方法不适合我,因为我想突出显示元素,然后用户点击它。所以我为此目的使用StateListDrawable
:
mOddColorDrawable = new ColorDrawable(
context.getResources().getColor(R.color.list_item_bg2));
mEvenColorDrawable = new ColorDrawable(
context.getResources().getColor(R.color.list_item_bg1));
mSelector = new ColorDrawable(
context.getResources().getColor(R.color.list_item_selector));
public void bindView(View view, Context context, Cursor cursor) {
// ...
setBackground(cursor.getPosition % 2 != 0, view);
}
public void setBackground(boolean isOdd, View listItem) {
StateListDrawable dr = new StateListDrawable();
Drawable drColor = isOdd ? mOddColorDrawable : mEvenColorDrawable;
dr.addState(new int[] { android.R.attr.state_pressed }, mSelectorDrawable);
dr.addState(new int[] { -android.R.attr.state_pressed }, drColor);
listItem.setBackgroundDrawable(bg);
}
因此,使用此代码,即使我为ListView
设置透明颜色提示,也会在滚动期间显示黑色元素背景。我花了几天时间调查这个问题,但无法克服它。所以,你是我最后的希望,StackOverflow!
要点:
答案 0 :(得分:5)
为列表项目制作备用背景色。在你的适配器类中编写这行代码
public View getView(int position, View convertView, ViewGroup parent) {
View v = convertView;
ViewHolder holder;
if (v == null) {
LayoutInflater vi = (LayoutInflater) activity
.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
v = vi.inflate(R.layout.listitem, null);
if (position % 2 == 0) {
v.setBackgroundResource(R.color.firstcolor);
} else {
v.setBackgroundResource(R.color.second color);
}
...............
.........
您好 要获得完整的帮助,请访问我的Android博客,希望您能找到所需的答案。刚才我已经从我身边做过测试,它对我来说很好。 在底部,您将获得一个链接,以便您可以下载完整的源代码。
http://amitandroid.blogspot.in/2013/03/android-listview-with-alternate-list.html
请完整填写您的要求,请告诉我。
答案 1 :(得分:2)
在列表视图中设置cacheColorHint =“#00000000”。
了解更多信息..请阅读此帖Getting Black Screen while Scrolling in ListView in Android
答案 2 :(得分:1)
如果您使用的是动态列表视图,则可以避免黑屏
ListView listview=new ListView();
listview.setCacheColorHint(0);
如果你想在点击任何看似黄色的项目时制作透明的listitem,还有一件事。为了避免这个
listview.setSelector(new ColorDrawable(0x0));
用于布局用途 //在选择或单击列表项
时避免黄色android:listSelector="#00000000"
谢谢,
答案 3 :(得分:0)
嗨,请查看 tutorial 以获取更多信息。
在ListView标记上添加属性
android:cacheColorHint="#00000000"// setting as a transparent color
答案 4 :(得分:0)
setSelector(new ColorDrawable(0x0)); 单击listitem时用于避免黄色。如果你想对ListItem有一些悬停效果,那么在listiem中使用selctor。
listiemselector.xml
<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android">
<item
android:state_selected="false"
android:state_pressed="false"
android:drawable="@color/white" />
<item android:state_pressed="true"
android:drawable="@color/selected" />
<item android:state_selected="true"
android:state_pressed="false"
android:drawable="@color/selected" />
</selector>
并在listitem父布局中使用它。
android:background="@drawable/listiemselector"
答案 5 :(得分:0)
当我从中删除项目时,我遇到了同样的问题。今天我通过删除listView的“android:background”属性来解决它..它工作得很好..
答案 6 :(得分:0)
请使用 mListView.setFadingEdgeLength(0); ,其中mListView是ListView对象参考。它很完美。