2015-04-13 3 views
1

Я установил приложение для использования шаблона master/detail, то есть показывая список и данные о выбранном элементе одновременно в ландшафтном режиме, и только listview + начать новую деятельность для просмотра подробных сведений в портретном режиме.getActivity() в фрагменте возвращает null после изменения ориентации

Все, казалось, работало отлично, пока я не получил исключение NullPointerException при попытке использовать getActivity() в моем основном фрагменте после того, как изменил ориентацию в альбомном режиме. Странно, он работает в портретном режиме как до, так и после того, как я меняю ориентацию (и меняю назад на портрет)!

Я вызываю getActivity(), когда пользователь нажимает кнопку, поэтому определенно после того, как действие было создано, и getActivity не должен возвращать нуль, не так ли?

ответ

0

Похоже, что проблема возникла из моих XML-макетов. У меня есть разные макеты в портретном режиме и ландшафтном режиме, что-то вроде этого:

portrait.xml

<?xml version="1.0" encoding="utf-8"?> 
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    android:layout_width="match_parent" 
    android:layout_height="wrap_content" 
    android:orientation="horizontal" > 


     <fragment 
      android:id="@+id/PageFragment" 
      android:layout_width="match_parent" 
      android:layout_height="match_parent" 
      android:name="com.magnuswikhog.adrlibrary.MasterFragment" />      


</LinearLayout> 

landscape.xml

<?xml version="1.0" encoding="utf-8"?> 
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    android:layout_width="match_parent" 
    android:layout_height="wrap_content" 
    android:orientation="horizontal" 
    android:baselineAligned="false" > 


     <fragment 
      android:id="@+id/MasterFragment" 
      android:layout_weight="1" 
      android:layout_width="match_parent" 
      android:layout_height="match_parent" 
      android:name="com.magnuswikhog.adrlibrary.MasterFragment" />      

     <fragment 
      android:id="@+id/DetailsFragment" 
      android:layout_weight="1" 
      android:layout_width="match_parent" 
      android:layout_height="match_parent" 
      android:name="com.magnuswikhog.adrlibrary.DetailsFragment" />     

</LinearLayout> 

Обратите внимание, что элемент MasterFragment имеет ID = "PageFragment" в portrait.xml и id = "MasterFragment" в landscape.xml. Когда я изменил это на «MasterFragment» в portrait.xml, проблема исчезла! Поэтому удостоверьтесь, что ваши идентификаторы идентичны для одного и того же фрагмента во всех ваших макетах.