Pergunta

Como faço para ouvir o evento de clique em um ListView?

Isso é o que eu tenho agora

ListView list = (ListView)findViewById(R.id.ListView01);  
...  
list.setAdapter(adapter);  

Quando eu faço o seguinte

list.setOnItemSelectedListener(new AdapterView.OnItemSelectedListener() {  
   public void onItemSelected(AdapterView parentView, View childView, 
                                                         int position, long id) 
   {  
       setDetail(position);  
   }

   public void onNothingSelected(AdapterView parentView) {  

   }  
});  

Isso não parece fazer nada no clique.
E todos esses códigos vivem dentro de uma classe que estende a atividade.

Foi útil?

Solução

Na sua visualização de lista, use setOnItemClickListener

Outras dicas

Suponha que o objeto ListView seja LV, faça o seguinte-

lv.setClickable(true);
lv.setOnItemClickListener(new AdapterView.OnItemClickListener() {

  @Override
  public void onItemClick(AdapterView<?> arg0, View arg1, int position, long arg3) {

    Object o = lv.getItemAtPosition(position);
    /* write you handling code like...
    String st = "sdcard/";
    File f = new File(st+o.toString());
    // do whatever u want to do with 'f' File object
    */  
  }
});

Você precisa definir a visualização inflada "clicable" e "capaz de ouvir eventos de clique" no método do adaptador da classe getView ().

convertView = mInflater.inflate(R.layout.list_item_text, null);
convertView.setClickable(true);
convertView.setOnClickListener(myClickListener);

e declare o ouvinte de clique em sua lista da seguinte maneira,

public OnClickListener myClickListener = new OnClickListener() {
public void onClick(View v) {
                 //code to be written to handle the click event
    }
};

Isso é verdade apenas quando você está personalizando o adaptador, estendendo o BaseAdapter.

Consulte o Android_SDK/Sampos/Apidemos/Src/com/exemplo/android/apis/view/list14.java para obter mais detalhes

As duas respostas antes das minhas estão corretas - você pode usar OnItemClickListener.

É bom observar que a diferença entre OnItemClickListener e OnItemSelectedListener, embora pareça sutil, é de fato significativo, pois a seleção e o foco dos itens estão relacionados ao modo de toque do seu AdapterView.

Por padrão, no modo de toque, não há seleção e foco. Você pode dar uma olhada aqui Para mais informações sobre o assunto.

Esta solução é realmente minimalista e não atrapalha seu código.

Na tua list_item.xml (Não ListView!) Atribua o atributo Android: OnClick assim:

<RelativeLayout android:onClick="onClickDoSomething">

E então, em sua atividade, chame esse método:

public void onClickDoSomething(View view) {
   // the view is the line you have clicked on
}

Você tem que usar setOnItemClickListener alguém disse.
O código deve ser assim:

listView.setOnItemClickListener(new OnItemClickListener() {
    public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
        // When clicked, show a toast with the TextView text or do whatever you need.
        Toast.makeText(getApplicationContext(), ((TextView) view).getText(), Toast.LENGTH_SHORT).show();
    }
});

Primeiro, a aula deve implementar o clique do ouvinte:

implements OnItemClickListener

Em seguida, defina um ouvinte para o ListView

yourList.setOnItemclickListener(this);

E, finalmente, crie o método CLIC:

@Override
public void onItemClick(AdapterView<?> parent, View view, int position,
long id) {
Toast.makeText(MainActivity.this, "You Clicked at " +countries[+ position], Toast.LENGTH_SHORT).show();
}

Você pode dar uma olhada e baixar código aqui

Use setonItemClickListener () API em sua atividade. A seguir, a amostra.

listView.setOnItemClickListener(new AdapterView.OnItemClickListener(){

@Override
public void onItemClick(AdapterView<> parent, View view, int position, long id)
{
     // your code here.
}

});

Em Kotlin, adicione um ouvinte ao seu ListView tão simples quanto Java

your_listview.setOnItemClickListener { parent, view, position, id ->   

    Toast.makeText(this, position, Toast.LENGTH_SHORT).show()

 }
Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top