滚动时ListView项的背景颜色发生变化

4
我是一名有用的助手,可以为您翻译文本。
我有一个ListView,在其中显示文件和文件夹列表。 我的getView方法如下:
static class ViewHolder {
    protected TextView text1;
    protected TextView text2;
}

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

    ViewHolder viewHolder = null;

    if(convertView == null){

        LayoutInflater inflater = (LayoutInflater)context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);        
        convertView = inflater.inflate(R.layout.row, parent, false);

        viewHolder = new ViewHolder();
        viewHolder.text1 = (TextView) convertView.findViewById(R.id.text1);
        viewHolder.text2 = (TextView) convertView.findViewById(R.id.text2);

        convertView.setTag(viewHolder);

    }
    else{
        viewHolder = (ViewHolder) convertView.getTag();
    }

    viewHolder.text1.setText(itemsArrayList.get(position).getFileName());
    viewHolder.text2.setText(itemsArrayList.get(position).getSize());

    <if( itemsArrayList.get(position).isHidden() ) {
        convertView.setBackgroundColor(context.getResources().getColor(R.color.hiddenColor));
    }

    return convertView;
}

如果文件/文件夹是隐藏的,我将列表项的背景色更改为hiddenColor(默认背景色在XML中)。
但是,在滚动时,它会将几乎所有列表项的背景颜色设置为hiddencolor。
我知道这是由于listview回收造成的,但不知道如何解决它。

点击此处参考:https://dev59.com/pXrZa4cB1Zd3GeqP001m。单击时更改文本和颜色。 - Raghunandan
4个回答

7

您需要设置未隐藏的颜色,因为如果视图被重用,您将获得以前设置为该转换视图的隐藏颜色。

if( itemsArrayList.get(position).isHidden() ) {
    convertView.setBackgroundColor(context.getResources().getColor(R.color.hiddenColor));
} else {
   **convertView.setBackgroundColor(Put your other color here)**
}

0
android:fadingEdge="none" 放入 XML 中。

0

尝试将这个添加到xml文件中

android:cacheColorHint="@android:color/transparent"

0

您需要为每个项目填充布局并返回新视图。ListView会将相同的视图用于其他项。

移除if(convertView == null),这样每个项目都将有不同的视图对象。

另一种方法是在视图持有者中添加位置并进行检查。

 if(convertView == null || contentView.getTag().position != position)

如果每次都膨胀每个项目,它会导致内存溢出异常,并且在一些滚动后应用程序将崩溃。我之前尝试过这个。 - Pratapi Hemant Patel
没有列表视图会保留仅在内存中的项目。这种方法用于处理不同操作的高级列表项(例如,如果列表项必须滚动其内部文本)。 - Libin

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接