2016-01-18 13 views
0

Я заполняю ListView из ArrayList и в методе getView() адаптера. Я пытаюсь установить цвет фона определенного элемента на основе свойства пользователя, которое он отображается.Изменение цвета listviewitem в адаптере дает неожиданные результаты

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

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

    User user = getItem(position); 

    if (convertView == null) { 
    convertView = LayoutInflater.from(getContext()).inflate(R.layout.item_user, parent, false); 
    } 

    if (user.newStatus > 0) convertView.setBackgroundColor(Color.GREEN); 

    //some other stuff happens here 

    return convertView; 
} 

В случае, если я не объяснить ну, хотя user.newStatus равно 0, некоторые элементы ListViewItems становятся цветными зелеными независимо.

+0

делать, если еще если (user.newStatus> 0) { convertView.setBackgroundColor (Color.GREEN); } else { convertView.setBackgroundColor (Color.WHITE); } – Nik

+0

О, боже, спасибо. Это было так очевидно. Мне нужно сделать перерыв :) EDIT: На самом деле это было не так очевидно, так как это не очень логично. Связано ли это с повторными взглядами? Так как по умолчанию он должен быть белым. – HomeIsWhereThePcIs

+0

@HomeIsWhereThePcIs, попробуйте http://stackoverflow.com/questions/34741895/list-view-item-selected-background-changed-it-changes-other-item-also/34742289#34742289 –

ответ

1

Это происходит из-за ListView's recycling mechanism.

Добавление else дело, будет это исправить:

if (user.newStatus > 0) { 
    convertView.setBackgroundColor(Color.GREEN); 
} else { 
    convertView.setBackgroundColor(yourDefaultColor); 
}