Android - ListView com onTouchListner e OnItemClickListener

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.

Voce pode colocar os eventos dos botoes dos itens da lista quando voce infla ele no getView.

E por que a tela a ser exibida não pode ser outra atividade?

[quote=Marky.Vasconcelos]Voce pode colocar os eventos dos botoes dos itens da lista quando voce infla ele no getView.
[/quote]

Sim, meu Adapter faz isso.

O problema é: o evento Touch no item da lista ‘sobrepõe’ o eveto onItemClick do listView.

Preciso tratar os dois eventos:
onTouce(usuário clica e arrasta) -> tenho que dar um showNext no do item da Lista (Isso já está funcionando).

Clique(usuário clica no item) -> tenho buscar informações do cliente ‘clicado’ e mostrar view com suas informações.

Problema: o clique no item da lista ‘cai’ no evento onTouch do item da lista e não no onItemClick do ListView.

Na verdade meu main.xml tem um viewFlipper como elemento root que possui 2 layouts filhos:

Layout 1 ->lista de clientes

Layout 2 ->infs do cliente

Eu tiraria esse ViewFlipper e usaria duas atividades, ia te poupar trabalho.

E realmente, se tem um botao os eventos do onItemClick não são chamados. Quando eu precisei disso, eu tinha um botao fora do ListView que fazia os botoes do ListView aparecer e desaparecer.

[quote=Marky.Vasconcelos]Eu tiraria esse ViewFlipper e usaria duas atividades, ia te poupar trabalho.

E realmente, se tem um botao os eventos do onItemClick não são chamados. Quando eu precisei disso, eu tinha um botao fora do ListView que fazia os botoes do ListView aparecer e desaparecer.[/quote]

Opa, valeu a ajuda ae.

Acho que não expliquei meu problema direito. Tenho que fazer uma lista com o seguite comportamento:

se o usuário arrasta um item da lista(nome do cliente) horizontamente, mostra alguns botões com opçoes para o cliente. Estou fazerndo isso com um viewFlipper no listItem.

se o usuário clica no item da lista, qndo este está mostrando o nome do cliente, deve abrir outra atividade(vou fazer outra atividade msm, como vc disse) com informações do cliente.

É parecido com essa aplicação do twitter, se quiser olhe no tempo 0:58

Obrigado