2011-01-29 87 views
17

在我的Android应用我已经创建了一个名为myList中一个ListView组成部分,并与自己的自定义类型的对象填充它:如何从ListView中获取所选项目?

class MyClass{ 

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

} 

我用来与myList中绑定的ArrayList中theObjects一个ArrayAdapter:

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 

} 

什么似乎是问题?谢谢

回答

-2

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

你从未实例化过你的类。

+3

他说他可以查看这些东西,所以这个类必须实例化。 – xandy 2011-01-29 02:57:42

19

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

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

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

默认情况下,当你点击一个ListView项目它不会改变其状态为“已选择”。所以,当事件发生时,你会这样做:

myList.getSelectedItem(); 

该方法没有任何可返回的内容。你所要做的就是通过做使用的位置,并获得潜在的对象:

myList.getItemAtPosition(position); 
+1

这有助于找到所选项目的索引?你如何得到这个位置? – Zelphir 2016-01-27 16:21:22

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

onItemClick

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

touch mode,没有重点,没有选择。您的用户界面应该使用不同类型的小部件,例如单选按钮进行选择。

关于这个ListView的文档很糟糕,只是在setSelection上只有一个不起眼的提及。

4

由于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参数实际上给你所选择的项目的位置。

1

使用setOnItemClickListener是正确的答案,但如果你有一个键盘,您可以更改甚至用箭头选择(没有进行点击),那么,你也需要贯彻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 
      } 
     });