В списке, в зависимости от значения некоторых данных, должен выводится разный фон для элемента списка. Но по факту оно работает нормально только в версии 4.0 а в 4.1 и выше фон меняется только после того как список прокрутить чтобы элементы списка "ушли" за границы экрана, когда возвращаешь назад прокруткой, фон устанавливается как надо. Что такого в 4.1 изменилось ?
Фон элемента списка (там в каждом элементе списка на самом деле куча текстовых полей которые берутся из базы) меняю в классе наследнике SimpleCursorAdapter, в переопределенном методе bindView. Что интересно, не работает как надо только смена фона, остальные элементы (текстовые переме, цвета полей) в элементе списка обновляются без дополнительной прокрутки списка.
Каждый элемент списка - это LinearLayout (в котором размещены другие виджеты), фон элемента списка, когда надо, меняю в наследнике SimpleCursorAdapter с помощью метода setBackgroundColor(Color).
Не переключается фон элемента списка без прокрутки
- KamiSempai
- Сообщения: 1339
- Зарегистрирован: 17 фев 2012, 21:23
- Откуда: Мордор
Re: Не переключается фон элемента списка без прокрутки
В bindView вы только цвет фона меняете?
И еще... getView переопределяете?
И еще... getView переопределяете?
R.id.team
Хватит таскать макулатуру на тренировку! Используй T Note.
Хватит таскать макулатуру на тренировку! Используй T Note.
Re: Не переключается фон элемента списка без прокрутки
В bindView много чего меняется, не только цвет фона, и это работает (кроме цвета фона на версии >=4.1)
Нет, getView не переопределяю.
Нет, getView не переопределяю.
- KamiSempai
- Сообщения: 1339
- Зарегистрирован: 17 фев 2012, 21:23
- Откуда: Мордор
Re: Не переключается фон элемента списка без прокрутки
Вот пример кода, который прекрасно работает на Андроиде 4.2.2:
Значит, что-то не правильно в вашем коде. Если напишете код bindView, можно будет сказать более определенно, где ошибка.
Код: Выделить всё
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);
}
}
}
R.id.team
Хватит таскать макулатуру на тренировку! Используй T Note.
Хватит таскать макулатуру на тренировку! Используй T Note.