Страница 1 из 1

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

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

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

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

Добавлено: 03 июл 2013, 12:10
KamiSempai
В bindView вы только цвет фона меняете?
И еще... getView переопределяете?

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

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

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

Добавлено: 05 июл 2013, 11:14
KamiSempai
Вот пример кода, который прекрасно работает на Андроиде 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, можно будет сказать более определенно, где ошибка.