2012-02-15 3 views
0

Я получаю странную ошибку android java.lang.StackOverflowError при загрузке записей в моем списке. Это странно в том, что это всегда происходит в третий раз, когда я загружаю свой список.android java.lang.StackOverflowError в listview

Идея заключается в том, что у меня есть карта с множеством маркеров (магазинов). Пользователь может щелкнуть меню -> показать список магазинов, и он получает заполненный список. Затем он может нажать на конкретный магазин в списке, и он получает ту же карту обратно, но тогда магазин сосредоточен. Затем он может повторить те же действия: menu -> show shop list.

На самом деле существует какая-то петля, но пользователь сам решает, хочет ли он ходить (карта -> список -> карта ...), или он может (нажав на контакт) просто выйти ...

Все работает нормально в течение первых 2-х раз ... В третий раз, когда я хочу загрузить список, произойдет сбой приложений.

Log:

02-15 13:10:00.632: E/AndroidRuntime(23826): FATAL EXCEPTION: main 
02-15 13:10:00.632: E/AndroidRuntime(23826): java.lang.StackOverflowError 
02-15 13:10:00.632: E/AndroidRuntime(23826): at android.view.View.draw(View.java:6880) 
02-15 13:10:00.632: E/AndroidRuntime(23826): at android.view.ViewGroup.drawChild(ViewGroup.java:1646) 
02-15 13:10:00.632: E/AndroidRuntime(23826): at android.view.ViewGroup.dispatchDraw(ViewGroup.java:1373) 
02-15 13:10:00.632: E/AndroidRuntime(23826): at android.view.ViewGroup.drawChild(ViewGroup.java:1644) 
02-15 13:10:00.632: E/AndroidRuntime(23826): at android.view.ViewGroup.dispatchDraw(ViewGroup.java:1373) 
02-15 13:10:00.632: E/AndroidRuntime(23826): at android.widget.AbsListView.dispatchDraw(AbsListView.java:1480) 
02-15 13:10:00.632: E/AndroidRuntime(23826): at android.widget.ListView.dispatchDraw(ListView.java:3138) 
02-15 13:10:00.632: E/AndroidRuntime(23826): at android.view.View.draw(View.java:6986) 

Я прочитал много сообщений, что эта ошибка обычно появляется, когда у вас есть бесконечный цикл. Итак, это какая-то андроидная интерпретация: если вы переходите от одной активности к другой несколько раз, она думает, что у вас бесконечный цикл? У меня нет других идей, почему это может случиться. (Еще одна вещь, которую нужно добавить, эти 2 действия находятся на одной и той же вкладке, я имею в виду, что я использую одну и ту же вкладку, но меняю содержимое).

Код для меняющегося содержания:

Tabs s = (Tabs) getParent(); 
     Intent myIntent = new Intent(getApplicationContext(), Map.class); 
     myIntent.putExtra("playgroundID", playgroundsArrayHolder.ID); 
     View view = s.getLocalActivityManager().startActivity("map", 
      myIntent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP)).getDecorView(); 
     setContentView(view); 

EDIT:

я вроде получил его на работу с одним обманом. Я объединил 2 действия в 1 (1 xml - сокрытие компонентов, которые мне не нужны в данный момент). В этом случае мне не нужно перезагружать свою активность каждый раз, когда пользователь ее покидает. Я просто показываю/скрываю компоненты.

Я знаю, что это большой чит, но это единственный способ заставить его работать. Я попытался сделать атрибуты статичными и привязать адаптер к нему, но это не сработало. И проблема на самом деле появилась, когда я устанавливал адаптер в listview.

Любая дополнительная помощь приветствуется. Kind'a не хочет оставаться с 2 видами деятельности в 1:/


ОК, проблема все еще остается. Любая помощь с оценкой

Я протестировал программу двумя простыми действиями (относительные макеты, на которых размещена 1 кнопка), под 1 вкладкой. У каждого из них была связь друг с другом, и он сработал после третьего цикла.

Я иду от одного вида деятельности к другому с помощью следующего кода:

Tabs s = (Tabs) getParent(); 
    Intent myIntent = new Intent(getApplicationContext(), Map.class); 
    View view = s.getLocalActivityManager().startActivity("map", 
     myIntent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP)).getDecorView(); 
    setContentView(view); 

Это не имеет значения, что у меня есть макеты в деятельности, в основном это до сих пор выходит из строя каждые 3 цикла.

У меня нет других идей, кроме того, что андроид интерпретирует эту навигацию (от одной активности к другой под той же вкладкой) как инфинитивный цикл? Что в основном пользователи делают, а не цикл, который программируется мной.

+0

проверки, если у вас слишком много вложенных макетов – user936414

+0

вы читали Тхи один? http://stackoverflow.com/questions/4342761/how-do-you-use-intent-flag-activity-clear-top-to-clear-the-activity-stack –

+0

Да, я пытался сделать все с помощью а также добавить все элементы к нему. Это не помогло, тот же самый крах (третий раз) –

ответ

8

OK вот что я нашел (цитата из Mark Murphy (a Commons Guy))

Это означает, что стек пространство исчерпывается.

Ваш пользовательский интерфейс, вероятно, имеет слишком много уровней в своей иерархии. Запустите программу -искательи просмотрите диаграмму, показывающую ваши группы просмотров и все, что они содержат. Попытайтесь устранить некоторые слои (например, замените вложенными LinearLayouts одним RelativeLayout, избавитесь от действий-в-вкладках и переключитесь на виды-в-вкладках).

Моей очень грубо эмпирическое правило:

  • Если иерархия имеет < 10 слоев, вы не должны иметь никаких проблем
  • Если иерархия имеет 10-14 слоев, я получаю нервные
  • Если ваши иерархия имеет> = 15 слоев, он собирается взорвать иногда
+0

Я получаю следующую ошибку в hierarchyviewer: «Невозможно получить версию сервера просмотра с устройства» –

+0

http://developer.android.com/guide/developing/debugging/index.html и '1. Подключите устройство или запустите эмулятор. Чтобы сохранить безопасность, приложение Hierarchy Viewer может подключаться только к устройствам, на которых установлена ​​версия для Android-разработчика. Hierarchyviewer не работает на реальном устройстве, но работает только на эмуляторе Android и версии разработчика системы Android до сих пор ... 'читайте здесь http://marakana.com/forums/android/learning_android_book/472.html –

+0

и об отладке пользовательского интерфейса http://developer.android.com/guide/developing/debugging/debugging-ui.html –

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