如何从ListView中获取所选项目?

在我的Android应用程序中,我创build了一个名为myList的ListView组件,并用自己的自定义types的对象填充它:

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

我使用ArrayAdapter绑定ArrayList theObjects myList:

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

这工作正常,列表填充等,但是当我试图访问选定的项目,我收到一个空对象。 我已经完成了这个使用

 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 } 

什么似乎是问题? 谢谢

Solutions Collecting From Web of "如何从ListView中获取所选项目?"

默认情况下,当你点击一个ListView项目时,它不会将其状态更改为“selected”,因此,当事件触发时,您可以:

 myList.getSelectedItem() 

该方法没有任何回报。 你所要做的就是通过这样做来使用这个位置并获得下层的对象:

 myList.getItemAtPosition(position) 

您正在实现Click Handler而不是Select Handler。 列表默认情况下不会有select。

在你上面的例子中你应该改变的是

 public void onItemClick(AdapterView<?> adapter, View v, int position, long id) { MyClass item = (MyClass) adapter.getItem(position); } 

onItemClick

 String text = parent.getItemAtPosition(position).toString(); 

由于onItemClickLitener()本身将为您提供所选项目的索引,因此您可以简单地执行getItemAtPosition(i).toString() 。 代码片段如下:

  listView.setOnItemClickListener(new AdapterView.OnItemClickListener() { @Override public void onItemClick(AdapterView<?> adapterView, View view, int i, long l) { String s = listView.getItemAtPosition(i).toString(); Toast.makeText(activity.getApplicationContext(), s, Toast.LENGTH_LONG).show(); adapter.dismiss(); // If you want to close the adapter } }); 

在上面的方法中, i参数实际上给你所选项目的位置。

 myList.setOnItemClickListener(new OnItemClickListener() { public void onItemClick(AdapterView<?> adapter, View v, int position, long id) { MyClass selItem = (MyClass) adapter.getItem(position); } } 

在触摸模式下 ,没有焦点,也没有select。 您的用户界面应该使用不同types的小部件,例如单选button进行select。

关于这个ListView的文档是可怕的,只是在setSelection上的一个晦涩的提及。

使用setOnItemClickListener是正确的答案,但是如果你有一个键盘,你甚至可以用箭头改变select(不要执行点击),所以你还需要实现setOnItemSelectedListener:

 myListView.setOnItemSelectedListener(new AdapterView.OnItemSelectedListener() { @Override public void onItemSelected(AdapterView<?> adapterView, View view, int position, long l) { MyObject tmp=(MyObject) adapterView.getItemAtPosition(position); } @Override public void onNothingSelected(AdapterView<?> adapterView) { // your stuff } }); 

MyClass selItem =(MyClass)myList.getSelectedItem(); //

你从来没有实例化你的课堂。