ListView item colorir na seleção não está funcionando corretamente na versão 8/9 da API do Android
Atualmente estou usando um ListView para exibir um tipo de itens. Eu implementei um modo de ação para selecionar vários itens e excluir maciçamente que funciona bem no Android 4.x. Mas quando eu tentei com a versão 8 ou 9 da API (android 2.2.x / 2.3.x), a seleção funciona internamente como esperado, mas os itens da linha são coloridos aleatoriamente.
Se o usuário selecionar a primeira linha, a primeira linha interna será selecionada, mas o número da linha 4 será colorido. Quando clico em outra linha, esta linha e a primeira são coloridas. É um comportamento estranho que eu espero que funcione normalmente como em dispositivos 4.x.
Clique com o botão direito sobre a tecla para ativar o modo de ação e verifique o item de ListView há muito tempo clicado:
@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, responsável por marcar / desmarcar itens do ListView, marcando-os internamente e alterando sua cor de fundo:
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.");
}
}
}
Essas classes / métodos estão dentro da Activity,listView
é declarado em cima dele.
Mais considerações:
Usando ActionBarSherlock (mostra o CAB, mas acho que isso não é importante aqui) e Roboguice, mas eu não tenho nenhum problema com isso.Eu estava sempre desenvolvendo com o emulador. Além disso, eu não pude experimentar meu aplicativo com o Android 3.x (tenho problemas com esta versão, o emulador não inicia), então não sei se o problema persiste nessas versões. ATUALIZAÇÃO: Testado no android 3.0 API 11, funciona bem como no 4.x.Eu depurei o código eView
s em ambos os métodos estão ok, mas quando eu chamoview.setBackgroundColor(checkedColor);
, outroView
é colorido.Alguma sugestão? Espero que alguém possa ajudar!