Como lidar com o ListView Click In Android
-
20-09-2019 - |
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.
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()
}