2011-01-29 91 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 
      } 
     }); 
相關問題