Как обработать щелчок ListView в Android
-
20-09-2019 - |
Вопрос
Как мне прослушать событие click в ListView?
Это то, что у меня есть сейчас
ListView list = (ListView)findViewById(R.id.ListView01);
...
list.setAdapter(adapter);
Когда я делаю следующее
list.setOnItemSelectedListener(new AdapterView.OnItemSelectedListener() {
public void onItemSelected(AdapterView parentView, View childView,
int position, long id)
{
setDetail(position);
}
public void onNothingSelected(AdapterView parentView) {
}
});
Похоже, это ничего не делает при нажатии.
И весь этот код находится внутри класса, который расширяет Activity .
Решение
В вашем представлении списка используйте setOnItemClickListener
Другие советы
Предположим, что объектом ListView является lv, выполните следующие действия-
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
*/
}
});
Вам нужно установить раздутый вид "Интерактивным" и "способным прослушивать события щелчка" в вашем методе getView() класса адаптера.
convertView = mInflater.inflate(R.layout.list_item_text, null);
convertView.setClickable(true);
convertView.setOnClickListener(myClickListener);
и объявите прослушиватель кликов в вашем ListActivity следующим образом,
public OnClickListener myClickListener = new OnClickListener() {
public void onClick(View v) {
//code to be written to handle the click event
}
};
Это справедливо только в том случае, если вы настраиваете Адаптер путем расширения BaseAdapter.
Обратитесь к ANDROID_SDK/samples/ApiDemos/src/com/example/android/apis/view/List14.java для получения более подробной информации
Два ответа перед моим верны - вы можете использовать OnItemClickListener
.
Приятно отметить, что разница между OnItemClickListener
и OnItemSelectedListener
, хотя и звучит утонченно, на самом деле имеет большое значение, поскольку выбор элемента и фокусировка связаны с сенсорным режимом вашего AdapterView
.
По умолчанию в сенсорном режиме выделение и фокусировка отсутствуют.Вы можете взглянуть здесь для получения дополнительной информации по этому вопросу.
Это решение действительно минималистично и не портит ваш код.
В вашем list_item.xml (НЕ ListView!) назначьте атрибут android:onClick вот так:
<RelativeLayout android:onClick="onClickDoSomething">
и затем в вашей деятельности вызовите этот метод:
public void onClickDoSomething(View view) {
// the view is the line you have clicked on
}
Вы должны использовать setOnItemClickListener
- сказал кто-то.
Код должен быть примерно таким:
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();
}
});
Во-первых, класс должен реализовывать click listenener :
implements OnItemClickListener
Затем установите прослушиватель в ListView
yourList.setOnItemclickListener(this);
И, наконец, создайте метод 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();
}
вы можете взглянуть и загрузить код здесь
Используйте setOnItemClickListener() api в своей деятельности.Ниже приведен пример.
listView.setOnItemClickListener(new AdapterView.OnItemClickListener(){
@Override
public void onItemClick(AdapterView<> parent, View view, int position, long id)
{
// your code here.
}
});
В Kotlin добавьте прослушиватель в свой ListView так же просто, как java
your_listview.setOnItemClickListener { parent, view, position, id ->
Toast.makeText(this, position, Toast.LENGTH_SHORT).show()
}