2016-06-20 5 views
0

Я использую функцию onConfigurationChanged, чтобы проверить изменение ориентации на android 4.0.3 для отображения двух разных фрагментов в моем проекте, но когда приложение работает в первом местоположении (пейзаж или портрет), связанный фрагмент не отображается, когда я изменяю отображаемый ориентировочный фрагмент, но когда я меняю его снова, приложение разбилось. вот мой код:Почему приложение сбой при использовании функции onConfigurationChanged?

FragmentManager  fragmentmanager  = getFragmentManager(); 
FragmentTransaction fragmentTransaction = ragmentmanager.beginTransaction(); 


@Override 
public void onConfigurationChanged(Configuration newConfig) { 
    super.onConfigurationChanged(newConfig); 

    // Checks the orientation of the screen 
    if (newConfig.orientation == Configuration.ORIENTATION_LANDSCAPE) { 
     Fragment1 fragment1 = new Fragment1(); 
     fragmentTransaction.replace(android.R.id.content, fragment1); 

    } else if (newConfig.orientation == Configuration.ORIENTATION_PORTRAIT) { 
     Fragment2 fragment2 = new Fragment2(); 
     fragmentTransaction.replace(android.R.id.content, fragment2); 
    } 
    fragmentTransaction.commit(); 
} 

как я могу решить эту проблему?

+0

какое исключение вы получаете? –

+0

Положить журнал исключения – Amir

+0

И я думаю, что вы не отсоединяете предыдущий фрагмент, и это является причиной исключения. – Amir

ответ

0

Прежде всего убедитесь, что вы указали атрибут android:configChanges в своей деятельности в манифесте.

Когда изменение конфигурации происходит во время выполнения, активность отключается и перезапускается по умолчанию, но объявление конфигурации с этим атрибутом предотвратит перезапуск активности. Вместо этого активность остается запущенной и вызывается метод onConfigurationChanged().

Таким образом, вы должны объявить манифест атрибут, чтобы сделать вашу активность знаю, что вы собираетесь обрабатывать изменения конфигурации самостоятельно:

<activity android:name=".ActivityName" 
    android:label="@string/app_name" 
    android:configChanges="keyboardHidden|orientation" /> 

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

В конце концов, положить линий FragmentManager fragmentmanager = getFragmentManager(); FragmentTransaction fragmentTransaction = ragmentmanager.beginTransaction();

внутри OnConfigurationChange(), чтобы избежать исключения нулевого указателя после сборки мусора.

+0

благодарю вас, моя ошибка заключалась в использовании FragmentManager fragmentmanager = getFragmentManager(); FragmentTransaction фрагментTransaction = ragmentmanager.beginTransaction(); из функции, но все еще существует проблема, что в первом запущенном приложении ни один фрагмент не отображается. :( – zahraMHD

+0

при первом запуске проверьте, являетесь ли вы Портрет или Пейзаж, а затем примените транзакцию –

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