ListView项目背景颜色

时间:2013-01-17 12:14:13

标签: android android-listview listviewitem

我有一个ListView,其中每一个项目应该有不同的颜色(例如:白色 - >灰色 - >白色 - >灰色等),它似乎最初工作但我一开始滚动,backgroundcolor的渲染似乎失败:另一种颜色随机设置为项目,当我再次向上滚动时,这种情况发生在开头颜色正确的项目上。有人会暗示我为什么会这样吗?

我在适配器中试过这个:

    if((position % 2) == 1) {
        layoutHolder.setBackgroundColor(getContext().getResources().getColor(R.color.light_green));
    }

这在我的ListFragment中:

    private AsyncTask<Void, Void, Void> fillList = new AsyncTask<Void, Void, Void>() {

    @Override
    protected Void doInBackground(Void... params) {
        addListItems();
        return null;
    }

    @Override
    protected void onPostExecute(Void result) {
        for (int i = 1; i < getListView().getChildCount()-1; i = i+2) {
            LOGI(TAG, "for-loop " + String.valueOf(i));
            getListView().getChildAt(i).setBackgroundColor(getSherlockActivity().getResources().getColor(R.color.light_green));
        }
    }   
};

更新

我做了一些日志记录,发现如果我在屏幕上添加的元素多于可见元素并检查ListViews子计数,ListView只保存最初对屏幕可见的子元素,其余的滚动完成时似乎加载/添加。

3 个答案:

答案 0 :(得分:4)

适配器中的

使用此代码..它的工作..你需要提供else条件。

if ( position % 2 == 0 ){
                convertView.setBackgroundColor(Color.GREEN);
            }else{
                convertView.setBackgroundColor(Color.RED);
            }

enter image description here

答案 1 :(得分:1)

在适配器的getView()

中试试这个
if((position % 2) == 1) {
                  LayoutHolder.setBackgroundColor(getContext().getResources().getColor(R.color.white));
}else{
            LayoutHolder.setBackgroundColor(getContext().getResources().getColor(R.color.gray)
}

答案 2 :(得分:0)

尝试在onPostExecute()

中添加此内容
getListView().getChildAt(i).setCacheColorHint(getSherlockActivity().getResources().getColor(R.color.light_green));