2012-09-12 33 views
2

風景和肖像的不同佈局之間的方向更改似乎很容易,但是我無法找到適合當前情況的解決方案。從雙窗格方向更改爲單窗格

我想用一個雙窗格佈局,在橫向模式下

資源\佈局,土地\ dashboard_activity.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="match_parent" 
    android:orientation="horizontal" > 

    <fragment class="xxx.DashboardFragment" 
      android:id="@+id/master_frag" 
      android:layout_width="@dimen/timeline_size" 
      android:layout_height="match_parent"/> 

    <fragment class="xxx.TaskInstanceFragment" 
      android:id="@+id/details_frag" 
      android:layout_width="match_parent" 
      android:layout_height="match_parent" /> 
</LinearLayout> 

兩個片段,並在縱向模式下的單面板佈局

資源\佈局\ dashboard_activity.xml

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

    <fragment class="xxx.DashboardFragment" 
     android:id="@+id/master_frag" 
     android:layout_width="match_parent" 
     android:layout_height="match_parent" 
     /> 

</FrameLayout> 

我要指出THA DashboardFragment包含一個ViewPager。不知道它是否重要。

現在,當我從橫向(雙)更改爲肖像(單)的方向時,應用程序崩潰,因爲它想更新details_frag。當我以縱向方式開始活動時,它會起作用,只有從橫向切換到縱向會產生問題。

在活動中有如下代碼:

@Override 
protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.dashboard_activity); 

    Fragment frag = getSupportFragmentManager().findFragmentById(R.id.details_frag); 
    mDualFragments = frag != null; 

    /* .. */ 
} 

現在FragmentManager還發現細節片段時,我切換到肖像模式,因此mDualFragments仍然是正確的,但應該是假的,這導致了後來調用細節片段中的方法。

那麼,這是爲什麼呢? :)

問候, Konsumierer

回答

5

因爲findFragmentById不僅返回片段在目前的佈局,但也先前顯示的片段。試試這個:

mDualFragments = frag != null && frag.isInLayout(); 
+0

謝謝,這就是解決方案。 – Konsumierer

+0

感謝人,經過3小時的谷歌搜索,我終於登陸這個頁面 – NullPointerException