Цвет элемента ListView при выделении не работает должным образом в Android API версии 8/9
Я в настоящее время использую ListView для отображения своего рода элементов. Я реализовал режим действия для выбора нескольких элементов и массового удаления, который хорошо работает в Android 4.x. Но когда я попробовал с API версии 8 или 9 (android 2.2.x / 2.3.x), выделение работает внутренне, как и ожидалось, но элементы строк окрашиваются в случайном порядке.
Если пользователь выбирает первую строку, внутренне выбирается первая строка, но строка № 4 окрашена. Когда я щелкаю по другой строке, эта и первая строки окрашиваются. Это странное поведение, которое я ожидаю, чтобы работать нормально, как на устройствах 4.x.
Переопределение с помощью длинного щелчка, чтобы активировать режим действия и проверить элемент ListView с длинным нажатием:
@Override
public boolean onItemLongClick(AdapterView<?> adapterView, View view, int position, long id) {
if (actionMode == null) {
listView.setOnItemClickListener(new CABClickListener());
actionMode = startActionMode(new ListActionMode());
// Check item pressed with long click
listView.setItemChecked(position, true);
view.setBackgroundColor(checkedColor);
logger.debug("Item at pos. " + position + ", checked.");
}
return true;
}
CABClickListener, отвечающий за проверку / снятие отметки с элементов ListView, их внутреннюю маркировку и изменение цвета фона:
private final class CABClickListener implements AdapterView.OnItemClickListener {
@Override
public void onItemClick(AdapterView<?> adapterView, View view, int position, long id) {
if (listView.isItemChecked(position)) {
view.setBackgroundColor(checkedColor);
logger.debug("Item at pos. " + position + ", checked.");
} else {
view.setBackgroundColor(uncheckedColor);
logger.debug("Item at pos. " + position + ", unchecked.");
}
}
}
Эти классы / методы находятся внутри Activity,listView
объявлено в верхней части этого.
Больше соображений:
Using ActionBarSherlock (it shows the CAB but I think this is not important here) and Roboguice, but I haven't any problem with that. I was always developing with the emulator. In addition, I couldn't try my app with android 3.x (got problems with this version, emulator doesn't launch), so I don't know if the problem persists in these versions. UPDATE: Tested in android 3.0 API 11, works well as on 4.x. I debugged the code andView
s in both methods are ok, but when I call
view.setBackgroundColor(checkedColor);
, another View
is colored.
Любое предложение? Надеюсь, кто-нибудь может помочь!