Как обращаться с ListView на Android

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

Solutions Collecting From Web of "Как обращаться с ListView на Android"

В представлении списка используйте 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 */ } }); 

Вам необходимо установить завышенный вид «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

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

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

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

Вы должны использовать 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(); } }); 

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

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

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

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

В вашем 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 () api в своей деятельности. Ниже приведен образец.

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