Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

How to get the selected item from ListView?

in my Android app I have created a ListView component called myList, and filled it with objects of my own custom type:

class MyClass{      private String displayName;     private String theValue; ... //here constructor, getters, setters and toString() are implemented  } 

I used the ArrayAdapter to bound the ArrayList theObjects with myList:

ArrayAdapter<MyClass> adapter=                  new ArrayAdapter<MyClass>(this, R.layout.lay_item, theObjects); myList.setAdapter(adapter); 

This works fine, the list is populated and etc., but when I'm trying to access the selected item, i receive a Null object. I've done this using

myList.setOnItemClickListener(new OnItemClickListener() {     public void onItemClick(AdapterView<?> adapter, View v, int position, long id) {  MyClass selItem = (MyClass) myList.getSelectedItem(); // String value= selItem.getTheValue(); //getter method  } 

What seems to be the problem? Thank you

like image 812
Bghaak Avatar asked Jan 29 '11 02:01

Bghaak


People also ask

How to get selected Item value from ListView in Android?

To get which item was selected, there is a method of the ListView called getItemAtPosition. Add this line to your OnItemClick method: String itemValue = (String) theListView. getItemAtPosition( position );


2 Answers

By default, when you click on a ListView item it doesn't change its state to "selected". So, when the event fires and you do:

myList.getSelectedItem(); 

The method doesn't have anything to return. What you have to do is to use the position and obtain the underlying object by doing:

myList.getItemAtPosition(position); 
like image 93
DrTchock Avatar answered Oct 03 '22 22:10

DrTchock


You are implementing the Click Handler rather than Select Handler. A List by default doesn't suppose to have selection.

What you should change, in your above example, is to

public void onItemClick(AdapterView<?> adapter, View v, int position, long id) {     MyClass item = (MyClass) adapter.getItem(position); } 
like image 30
xandy Avatar answered Oct 03 '22 23:10

xandy