У меня есть список, в котором я показываю списки файлов и папок. Я использую свой метод 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)

Но при прокрутке он устанавливает почти весь цвет фона элемента списка как скрытый цвет.

Я знаю, что это связано с повторным использованием списка, но не знаю, как это решить.

4
Pratapi Hemant Patel 28 Мар 2014 в 17:16

4 ответа

Лучший ответ

Вы также должны установить не скрытый цвет, потому что, если представление используется повторно, вы получите hiddenColor, если он был установлен ранее для этого представления преобразования.

if( itemsArrayList.get(position).isHidden() ) {
    convertView.setBackgroundColor(context.getResources().getColor(R.color.hiddenColor));
} else {
   **convertView.setBackgroundColor(Put your other color here)**
}
7
Alex 28 Мар 2014 в 17:19

Поместите android:fadingEdge="none" в xml

0
Lucian Novac 28 Мар 2014 в 17:21

Попробуйте добавить это в файл xml

android:cacheColorHint="@android:color/transparent"
0
Rat-a-tat-a-tat Ratatouille 28 Мар 2014 в 17:24

Вы должны раздувать макет для каждого элемента и возвращать новое представление. Listview использует то же представление для других элементов.

Удалите if (convertView == null), чтобы у каждого элемента был свой объект представления.

Другой способ - добавить позицию в держателе просмотра и проверить

 if(convertView == null || contentView.getTag().position != position)
0
Libin 28 Мар 2014 в 17:25