Kolorowanie elementu ListView przy wyborze nie działa poprawnie w Android API wersja 8/9
Obecnie używam ListView do wyświetlania elementów. Zaimplementowałem tryb działania, aby wybrać wiele elementów i usunąć masowo, który działa dobrze w systemie Android 4.x. Ale kiedy próbowałem z API w wersji 8 lub 9 (Android 2.2.x / 2.3.x), wybór działa wewnętrznie zgodnie z oczekiwaniami, ale elementy wiersza są losowo kolorowe.
Jeśli użytkownik wybierze pierwszy wiersz, wybierany jest pierwszy wiersz wewnętrzny, ale numer wiersza 4 jest kolorowy. Kiedy klikam inny wiersz, ten wiersz i pierwszy wiersz są kolorowe. To dziwne zachowanie, które, jak oczekuję, będzie działać normalnie, jak na urządzeniach 4.x.
Długie kliknięcie nadpisuje, aby aktywować tryb akcji i sprawdź długo kliknięty element 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, odpowiedzialny za sprawdzenie / odznaczenie elementów ListView, oznaczenie ich wewnętrznie i zmianę koloru tła:
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.");
}
}
}
Te klasy / metody znajdują się wewnątrz działania,listView
jest zadeklarowany na początku.
Więcej rozważań:
Używanie ActionBarSherlock (pokazuje CAB, ale myślę, że to nie jest tutaj ważne) i Roboguice, ale nie mam z tym żadnego problemu.Zawsze pracowałem nad emulatorem. Ponadto nie mogłem wypróbować mojej aplikacji z Androidem 3.x (problemy z tą wersją, emulator nie uruchamia się), więc nie wiem, czy problem występuje w tych wersjach. AKTUALIZACJA: Testowane na android 3.0 API 11, działa dobrze jak na 4.x.Debugowałem kod iView
s w obu metodach są w porządku, ale kiedy dzwonięview.setBackgroundColor(checkedColor);
, inneView
jest kolorowy.Jakieś sugestie? Mam nadzieję, że każdy może pomóc!