在我的Android应用程序中,我创建了一个名为myList的ListView组件,并用我自己的自定义类型的对象填充它:
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);
这工作正常,列表填充等等,但当我尝试访问所选项目时,我收到一个Null对象.我已经完成了这个
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
}
什么似乎是问题?谢谢
小智 45
默认情况下,当您单击ListView项时,它不会将其状态更改为"已选择".所以,当事件发生时你会这样做:
myList.getSelectedItem();
该方法没有任何回报.你要做的是通过这样做来使用位置并获得底层对象:
myList.getItemAtPosition(position);
xan*_*ndy 21
您正在实现Click Handler而不是Select Handler.默认情况下,列表不会选择.
在上面的例子中,你应该改变的是
public void onItemClick(AdapterView<?> adapter, View v, int position, long id) {
    MyClass item = (MyClass) adapter.getItem(position);
}
小智 6
on 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参数实际上为您提供所选项目的位置.
use*_*209 -1
MyClass selItem = (MyClass) myList.getSelectedItem(); //
你从未实例化过你的类。
| 归档时间: | 
 | 
| 查看次数: | 152866 次 | 
| 最近记录: |