片段中的getActivity()在方向更改后返回null

时间:2015-04-13 18:09:17

标签: android android-fragments

我已经设置了一个应用程序来使用主/详细模式,即在横向模式下同时显示列表视图和所选项目的详细信息,并且只有listview +以纵向模式启动详细视图的新活动。

在我将方向更改为横向模式后,在我的主片段中尝试使用getActivity()时,所有内容似乎都完美无缺,直到我得到NullPointerException。奇怪的是,它在我改变方向之前和之后都会以纵向模式工作(并且变回肖像)!

我在用户按下按钮时调用getActivity(),所以在创建活动后肯定是这样,并且getActivity不应该返回null,对吗?

1 个答案:

答案 0 :(得分: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 =&#34; PageFragment&#34;在portrait.xml和id =&#34; MasterFragment&#34;在landscape.xml中。当我把它更改为&#34; MasterFragment&#34;在portrait.xml中,问题消失了!因此,请确保您所有布局中的相同片段的ID都相同。