2015-06-25 2 views
0

Я новичок в разработке Android и столкнулся с проблемой, которую я не могу решить. Я внедрил ExpandableListView с обычным Adapter. У меня 5 групп, и каждая группа имеет 1 дочерний элемент. Каждый элемент группы имеет тип данных: org.myapp.ui.MyClass.java.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) . lv.getAdapter() GetItem (groupPosition);

Если у кого-то есть идея, почему это происходит (но только после расширения нескольких групп в ExpandableListView), пожалуйста, дайте мне знать.

+0

Вы бросаете объект String в объект MyClass - эти типы несовместимы - getItem получит текст (String) из положения адаптера. –

+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

Это никогда не работает..долго, пока ваш метод возвращает String –

+0

Знаете ли вы, есть ли другой способ получить объект каждого элемента группы при его расширении? поэтому я хочу получить объект группы, который я расширяю. –

Смежные вопросы