2016-09-02 3 views
1

Мое приложение вылетает при каждом изменении местоположения. Структура приложения проста: есть один Деятельность и множество фрагментов. Фрагмент Вывод осуществляется следующим образом:Почему мое приложение для Android периодически срабатывает?

ItemsFragment itemsFragment = new ItemsFragment() {GroupID = groupID, CurrentGroup = currentGroup}; 
itemsFragment.RetainInstance = true; 
var fragmentManager = SupportFragmentManager.BeginTransaction(); 
fragmentManager.Replace (Resource.Id.flContent, (SupportFragment) itemsFragment); 
fragmentManager.AddToBackStack (null); 
fragmentManager.Commit(); 

Я использую C# Xamarin, но принцип Java это то же самое, только немного другой синтаксис. Помогите новичку-разработчикам Android понять причину.

На мобильном устройстве выдает ошибку:

“Unfortunately App has Stopped” 

Где только можно положить Try ... Catch и получил эту ошибку:

Java.Lang.IllegalStateException: Can not perform this action after onSaveInstanceState 
+0

Здесь я ответил тот же вопрос: https://stackoverflow.com/questions/39101937/android-java-lang-illegalstateexception-in-onrequestpermissionsresult/39103284#39103284 –

+0

Есть тонны этих вопросов в stackoverflow, каждый из которых предоставляет много информации об этой проблеме. – mhenryk

ответ

1

Причина заключается в том, что вы иногда заменяя фрагменты после приостановки действия. Самый простой способ исправить это - использовать fragmentManager.CommitAllowingStateLoss();

Как упоминалось в @ user13, это самый простой и худший способ.
Если вы хотите хорошее решение, вы должны проверить, если Activity состояние Ok, чтобы заменить фрагмент, прежде чем на самом деле заменить его

+0

Самый простой и худший. – earthw0rmjim

+0

@ user13, да, вы правы –

+0

Объясните, как сделать лучший – Igor

0

Я советую вам попробовать с обработчиком

new Handler().post(new Runnable() { 
      public void run() { 
       ItemsFragment itemsFragment = new ItemsFragment() {GroupID = groupID, CurrentGroup = currentGroup}; 
       itemsFragment.RetainInstance = true; 
       var fragmentManager = SupportFragmentManager.BeginTransaction(); 
       fragmentManager.Replace (Resource.Id.flContent, (SupportFragment) itemsFragment); 
       fragmentManager.AddToBackStack (null); 
       fragmentManager.Commit(); 
      } 
     }); 
Смежные вопросы