Как обрабатывать щелчок ListView в Android - PullRequest
139 голосов
/ 18 марта 2010

Как прослушать событие нажатия на 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.

Ответы [ 9 ]

180 голосов
/ 18 марта 2010

В представлении списка используйте setOnItemClickListener

87 голосов
/ 22 декабря 2010

Предположим, что объектом 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
    */  
  }
});
42 голосов
/ 18 марта 2010

Вам необходимо установить раздутое представление "Clickable" и "способность слушать события щелчка" в вашем классе адаптера 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 для более подробной информации

17 голосов
/ 18 марта 2010

Два ответа перед моим являются правильными - вы можете использовать OnItemClickListener.

Хорошо отметить, что разница между OnItemClickListener и OnItemSelectedListener, хотя звучит тонко, на самом деле значительна, так как выбор предмета и фокусировка связаны с сенсорным режимом вашего AdapterView.

По умолчанию в сенсорном режиме выбор и фокусировка отсутствуют. Вы можете посмотреть здесь для получения дополнительной информации по этому вопросу.

8 голосов
/ 02 августа 2014

Это решение действительно минималистично и не портит ваш код.

В вашем list_item.xml (НЕ listView!) Назначьте атрибут android: onClick следующим образом:

<RelativeLayout android:onClick="onClickDoSomething">

и затем в своей деятельности вызовите этот метод:

public void onClickDoSomething(View view) {
   // the view is the line you have clicked on
}
6 голосов
/ 23 мая 2013

Вы должны использовать 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();
    }
});
5 голосов
/ 05 апреля 2014

Во-первых, класс должен реализовывать прослушиватель click:

implements OnItemClickListener

Затем установите слушателя в ListView

yourList.setOnItemclickListener(this);

И, наконец, создайте метод click:

@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();
}

Вы можете посмотреть и скачать код здесь

3 голосов
/ 20 января 2015

Используйте setOnItemClickListener () api в своей деятельности. Ниже приведен образец.

listView.setOnItemClickListener(new AdapterView.OnItemClickListener(){

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

});
0 голосов
/ 12 апреля 2019

В Kotlin добавьте слушателя в свой список, такой же простой, как java

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

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

 }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...