如何从ListView获取所选项目?

Bgh*_*aak 27 android listview

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

class MyClass{

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

}
Run Code Online (Sandbox Code Playgroud)

我使用ArrayAdapter将ArrayList theObjects绑定到myList:

ArrayAdapter<MyClass> adapter= 
                new ArrayAdapter<MyClass>(this, R.layout.lay_item, theObjects);
myList.setAdapter(adapter);
Run Code Online (Sandbox Code Playgroud)

这工作正常,列表填充等等,但当我尝试访问所选项目时,我收到一个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

}
Run Code Online (Sandbox Code Playgroud)

什么似乎是问题?谢谢

小智 45

默认情况下,当您单击ListView项时,它不会将其状态更改为"已选择".所以,当事件发生时你会这样做:

myList.getSelectedItem();
Run Code Online (Sandbox Code Playgroud)

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

myList.getItemAtPosition(position);
Run Code Online (Sandbox Code Playgroud)

  • 这有助于查找所选项目的索引?你怎么会在第一时间获得这个职位? (2认同)

xan*_*ndy 21

您正在实现Click Handler而不是Select Handler.默认情况下,列表不会选择.

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

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


小智 6

on onItemClick:

String text = parent.getItemAtPosition(position).toString();
Run Code Online (Sandbox Code Playgroud)


vip*_*per 6

由于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
        }
    });
Run Code Online (Sandbox Code Playgroud)

在上面的方法中,i参数实际上为您提供所选项目的位置.


use*_*209 -1

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

你从未实例化过你的类。

  • 他说他可以查看这些东西,所以该类一定已经实例化了。 (4认同)