滚动期间列表项变为黑色,setCacheColorHint()不起作用

时间:2013-03-06 05:40:05

标签: android android-listview

我的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!

要点:

  1. 我想让ListView具有两种不同的元素颜色。
  2. 我希望项目选择器具有自定义颜色。
  3. 如果我使用StateListDrawable,
  4. setCacheColorHint(透明)没有帮助。
  5. 在Froyo上一切正常,但在果冻豆上却没有。

7 个答案:

答案 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对象参考。它很完美。