Не переключается фон элемента списка без прокрутки

Интерфейс, диалоги, темы, стили, меню
Ответить
jBee
Сообщения: 41
Зарегистрирован: 03 апр 2013, 16:24

Не переключается фон элемента списка без прокрутки

Сообщение jBee » 02 июл 2013, 22:05

В списке, в зависимости от значения некоторых данных, должен выводится разный фон для элемента списка. Но по факту оно работает нормально только в версии 4.0 а в 4.1 и выше фон меняется только после того как список прокрутить чтобы элементы списка "ушли" за границы экрана, когда возвращаешь назад прокруткой, фон устанавливается как надо. Что такого в 4.1 изменилось ?
Фон элемента списка (там в каждом элементе списка на самом деле куча текстовых полей которые берутся из базы) меняю в классе наследнике SimpleCursorAdapter, в переопределенном методе bindView. Что интересно, не работает как надо только смена фона, остальные элементы (текстовые переме, цвета полей) в элементе списка обновляются без дополнительной прокрутки списка.

Каждый элемент списка - это LinearLayout (в котором размещены другие виджеты), фон элемента списка, когда надо, меняю в наследнике SimpleCursorAdapter с помощью метода setBackgroundColor(Color).

Аватара пользователя
KamiSempai
Сообщения: 1339
Зарегистрирован: 17 фев 2012, 21:23
Откуда: Мордор

Re: Не переключается фон элемента списка без прокрутки

Сообщение KamiSempai » 03 июл 2013, 12:10

В bindView вы только цвет фона меняете?
И еще... getView переопределяете?
R.id.team
Хватит таскать макулатуру на тренировку! Используй T Note.

jBee
Сообщения: 41
Зарегистрирован: 03 апр 2013, 16:24

Re: Не переключается фон элемента списка без прокрутки

Сообщение jBee » 04 июл 2013, 21:59

В bindView много чего меняется, не только цвет фона, и это работает (кроме цвета фона на версии >=4.1)
Нет, getView не переопределяю.

Аватара пользователя
KamiSempai
Сообщения: 1339
Зарегистрирован: 17 фев 2012, 21:23
Откуда: Мордор

Re: Не переключается фон элемента списка без прокрутки

Сообщение KamiSempai » 05 июл 2013, 11:14

Вот пример кода, который прекрасно работает на Андроиде 4.2.2:

Код: Выделить всё

public class MainActivity extends Activity {
	private static final String[] VALUES = {"Строка 1", "Строка 2", "Строка 3", "Строка 4", "Строка 5", "Строка 6",
											"Строка 1", "Строка 2", "Строка 3", "Строка 4", "Строка 5", "Строка 6",
											"Строка 1", "Строка 2", "Строка 3", "Строка 4", "Строка 5", "Строка 6",
											"Строка 1", "Строка 2", "Строка 3", "Строка 4", "Строка 5", "Строка 6"};

	@Override
	protected void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		setContentView(R.layout.activity_main);
		
		ListView list = (ListView) findViewById(R.id.listView1);
		
		MatrixCursor cursor = new MatrixCursor(new String[] {"_id", "value"});
		for (int i = 0; i < VALUES.length; i++) {
            cursor.newRow()
                    .add(i)
                    .add(VALUES[i]);
        }
		MyAdapter adapter = new MyAdapter(this, android.R.layout.simple_list_item_1, cursor, new String[] {"value"}, new int[] {android.R.id.text1}, 0);
		list.setAdapter(adapter);
	}
	
	private class MyAdapter extends SimpleCursorAdapter {
		public MyAdapter(Context context, int layout, Cursor c, String[] from,
				int[] to, int flags) {
			super(context, layout, c, from, to, flags);
		}

		@Override
		public void bindView(View view, Context context, Cursor cursor) {
			super.bindView(view, context, cursor);
			
			if(cursor.getPosition() % 2 == 0) view.setBackgroundColor(Color.BLUE);
			else view.setBackgroundColor(Color.WHITE);
		}
	}
}
Значит, что-то не правильно в вашем коде. Если напишете код bindView, можно будет сказать более определенно, где ошибка.
R.id.team
Хватит таскать макулатуру на тренировку! Используй T Note.

Ответить