2013-05-14 47 views
1

我正在顯示一個ListView,我填充了一個名爲LazyAdapter的自定義ListAdapter,其代碼來自這裏:http://www.androidhive.info/2012/02/android-custom-listview-with-image-and-text/。 LazyAdapter使用我的自定義對象「EventData」。我設法顯示我的列表,因爲我想,但現在我想獲得點擊的對象。我發現其他問題(hereherethere)一些幫助,並寫代碼:點擊從ListView獲取自定義對象

private OnItemClickListener mEventClickListener = new OnItemClickListener() { 
    @Override 
    public void onItemClick(AdapterView<?> av, View v, int arg2, long arg3) { 

     EventData selectedEvent = (EventData) eventsListView.getItemAtPosition(arg2); 

}; 

不過,我在執行得到鑄造錯誤。

05-14 17:10:46.718: E/AndroidRuntime(3863): java.lang.ClassCastException: java.lang.Integer 

我也嘗試過這種類似的解決方案:

EventData selectedEvent = (EventData) av.getItemAtPosition(arg2); 

我得到了同樣的錯誤投。我不知道如何以其他方式獲得我的Object EventData。

感謝您的幫助!

+0

發佈您的適配器代碼 – Pragnani 2013-05-14 15:26:43

+0

同意,它看起來像您的適配器的'getItem()'返回一個意外的值。 (最終,ListView的getItemAtPosition()只是調用你的Adapter的getItem()函數。 – 2013-05-14 15:34:08

+0

你如何填充/創建你的LazyAdapter?它接合你給適配器的ArrayList是一個整數數組。 – 2013-05-14 15:34:18

回答

1

在您的自定義列表適配器的底層數據結構(ArrayList的< AppData的>)返回一個整數getItem();所以您將收到ClassCastException

mEventData是提供給CustomListView列表

ArrayList<EventData> mEventData; 

@Override 
public Object getItem(int position) { 
    return mEventData.get(position); 
} 
+0

謝謝,我沒有注意到在我的LazyAdapter類中,現在它工作:) – 2013-05-15 08:08:52

1

在適配器類中,在方法getItem(int position)中,您應該返回該位置(不是位置)的EventData對象。

您可能會在getItem而不是EventData處返回Position值。

0

在我的代碼獲取我做對象

public void onItemClick(AdapterView<?> appList, View arg1, 
       int element, long arg3) { 
      // Get AppData for demo clicked 
      AppData item = demoList.get(element); 

其中demoList是綁定到適配器