Bom dia amigos,
estou com o seguinte problema:
Tenho que criar uma tela de clientes que possui como elemento principal uma ListView de clientes.
Essa lista precisa ter o seguinte comportamento:
- Se o usuário arrastar horizontalmente um item da lista, esse item deve alternar entre o nome do cliente e alguns botões
- Se o usuário Clicar em algum item da lista, uma tela com as informações do cliente deve ser mostrada(Não é outra atividade).
Segue exemplo do meu código:
Layout do meu listItem.xml:
<ViewFlipper>
<TextView>
<LinearLayout>
<Button></Button>
<Button></Button>
<Button></Button>
<LinearLayout>
</ViewFlipper>
Layout do main.xml
<LinearLayout>
<!-- Barra com informações -->
<TextView>
</TextView>
<Button>
</Button>
<!-- ListView com clientes -->
<ListView>
</ListView>
</LinearLayout>
Eu tenho minha implementação de um ListAdapter, que atribui um listener ao evento (onTouchEvent) de arrastar para cada item da lista.
public View getView(int aPosition, View aConvertView, ViewGroup aParent) {
...
view.setOnTouchListener(listener);
}
Minha atividade de clientes implementa o handler para o evento de touch dos itens da lista.
public class ListaClientes implements OnTouchListener{
...
@Override
public boolean onTouch(View view, MotionEvent event) {
float xAtual;
int atualViewDoFlipper;
switch(event.getAction()){
case MotionEvent.ACTION_DOWN:
xPrimeiroTouch = event.getX();
break;
case MotionEvent.ACTION_UP:
xAtual = event.getX();
atualViewDoFlipper = _flp_item_cliente.getDisplayedChild();
if(xPrimeiroTouch < xAtual){
// |--->
deslizaEsquerdaParaDireita();
} else if(xPrimeiroTouch > xAtual){
// <---|
deslizaDireitaParaEsquerda();
} else{
//Aqui significa que usuário clicou no item da lista, e não arrastou.
//Tenho que passar esse evento para o ListView, assim sei qual item da lista foi clicado, atravez do evento onItemClick.
//Tentei o metodo view.performClick();, mas dá stackOverflowException, com o fluxo de execução sempre 'caindo' aqui
}
break;
}
return true;
}
}
...
listviewClientes.setOnItemClickListener(new OnItemClickListener() {
@Override
public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
Log.i("TAG", "usuário clicou no item:" + position);
trataCliqueUsuario(position);
}
});
...
Meu problema é que não consigo fazer com que o metódo onItemClick seja chamado.
Prevendo meu próximo problema: ao clicar no item da lista qndo ela está exibindo os 3 botões, preciso que o click seja tratador pelos handler do botão e não pelo onItemClick da lista.
Pelo que pesquisei, a solução do meu problema pode estar nos metódos de DispatchEvent() da lista.
Agradeço a ajuda.