У меня есть список, в котором я показываю списки файлов и папок. Я использую свой метод 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 ответа
Вы также должны установить не скрытый цвет, потому что, если представление используется повторно, вы получите hiddenColor, если он был установлен ранее для этого представления преобразования.
if( itemsArrayList.get(position).isHidden() ) {
convertView.setBackgroundColor(context.getResources().getColor(R.color.hiddenColor));
} else {
**convertView.setBackgroundColor(Put your other color here)**
}
Поместите android:fadingEdge="none"
в xml
Попробуйте добавить это в файл xml
android:cacheColorHint="@android:color/transparent"
Вы должны раздувать макет для каждого элемента и возвращать новое представление. Listview использует то же представление для других элементов.
Удалите if (convertView == null), чтобы у каждого элемента был свой объект представления.
Другой способ - добавить позицию в держателе просмотра и проверить
if(convertView == null || contentView.getTag().position != position)
Похожие вопросы
Связанные вопросы
Новые вопросы
android
Android — это мобильная операционная система Google, используемая для программирования или разработки цифровых устройств (смартфонов, планшетов, автомобилей, телевизоров, одежды, очков, IoT). Для тем, связанных с Android, используйте теги, специфичные для Android, такие как android-intent, android-activity, android-adapter и т. д. Для вопросов, отличных от разработки или программирования, но связанных с Android framework, используйте эту ссылку: https://android .stackexchange.com.