2

在我的具体问题中,我有一个列表视图。在此列表视图中,我希望列表的第一行始终具有绿色背景色。我使用以下代码实现了这一点:

listView.setSelection(3);
View element = listView.getChildAt(0);
element.setBackgroundColor(Color.GREEN);

在背景中,我使用自定义适配器填充列表视图,随着行被回收,绿色对于出现的新行是多余的。以下是我的 getView 方法代码:

@Override
        public View getView(int position, View convertView, ViewGroup parent) {



            LayoutInflater inflater = (LayoutInflater) context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);

            View first = listView.getChildAt(0); 

            if (convertView == null){ 
                convertView = inflater.inflate(R.layout.list, parent, false); 
            }
            TextView textView = ((TextView) convertView.findViewById(R.id.textView2));
            textView.setText(lyrics[position]);
            if(){ // Need to reference the first row here. 
            textView.setBackgroundColor(Color.GREEN); 
            }else {
                textView.setBackgroundColor(Color.WHITE);
            }
            return convertView;
        }
    } 

所以在我的情况下,我需要知道列表视图中的第一个可见位置,以便我可以撤消重复的背景颜色。有什么方法可以实现这一目标吗?只要可行,我也愿意改变逻辑。

4

2 回答 2

2

ListView 的视图被回收,所以在你的适配器getView方法中你应该有 - 可能就在之前return convertView

if(position == 0) {
    convertView.setBackgroundColor(Color.GREEN);
} else {
    convertView.setBackgroundColor(Color.WHITE); // or whatever color
}
return convertView;

不需要您拥有以下代码:

View element = listView.getChildAt(0);
element.setBackgroundColor(Color.GREEN);
于 2013-09-23T09:23:59.027 回答
1
@Override
    public View getView(int position, View convertView, ViewGroup parent) {



        LayoutInflater inflater = (LayoutInflater) context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);

        View first = listView.getChildAt(0); 

        if (convertView == null){ 
            convertView = inflater.inflate(R.layout.list, parent, false); 
        }
        TextView textView = ((TextView) convertView.findViewById(R.id.textView2));
        textView.setText(lyrics[position]);
        if(position==getFirstVisiblePosition()){ // Need to reference the first row here. 
            textView.setBackgroundColor(Color.GREEN); 
        }else {
            textView.setBackgroundColor(Color.WHITE);
        }
        return convertView;
    }
} 
于 2013-09-23T09:25:23.337 回答