2015-06-25 42 views
0

我是android開發新手,遇到了一個我無法解決的問題。 我實施了ExpandableListView自定義Adapter。我有5個組,每個組有1個子項目。每個組元素都是數據類型:org.myapp.ui.MyClassjava.lang.ClassCastException:java.lang.String不能轉換爲org.myapp.ui.MyClass

我現在試圖在擴展它時獲取每個組元素的MyClass對象。對於我使用setOnGroupExpandListener

lv.setOnGroupExpandListener(new ExpandableListView.OnGroupExpandListener() { 
    public void onGroupExpand (int groupPosition){ 

     MyClass selected = (MyClass)lv.getAdapter().getItem(groupPosition); 
     servId = selected.getServiceId(); 

     // Do more stuff here 
} 
}); 

當我現在在模擬器中測試該代碼,我得到以下ClassCastException,但只有幾次擴大一些團體在ExpandableListView後。所以有幾次它的工作,然後突然它不,我得到這個例外。

java.lang.ClassCastException:java.lang.String中不能在這個代碼線被轉換爲org.myapp.ui.MyClass

MyClass的選擇=(MyClass的) 。lv.getAdapter()的getItem(groupPosition);

如果有人有一個想法,爲什麼會發生這種情況(但只有在ExpandableListView擴大幾個組後),請讓我知道。

+0

您正在將一個String對象投射到一個'MyClass'對象 - 這些類型是不兼容的 - getItem將從適配器位置獲取文本(字符串)。 –

+0

,但它在崩潰前工作了大約10次,所以我擴大了幾次exlistiew的組,並且適用於這些時間。 –

+0

你是否知道在擴展它時獲取每個組項目的對象的另一種方法? –

回答

1

摘自oracle docs,ClassCastException拋出以指示代碼嘗試將對象轉換爲其不是實例的子類。例如,下面的代碼生成一個ClassCastException:

Object x = new Integer(0); 
System.out.println((String)x); 

在你的情況,你正試圖將字符串轉換爲一個自定義的類,它永遠不會通過,因爲該行lv.getAdapter().getItem(groupPosition)給出的,而不是MyClass的對象的字符串。

+0

但爲什麼它的工作幾次,然後突然它崩潰?這就是讓我困惑的原因。 –

+0

它永遠不會工作..只要你的方法返回字符串 –

+0

你知道是否有另一種方式來獲取每個組項目的對象時擴大它?所以我想要的是獲得我正在擴大的小組項目的對象。 –

相關問題