0

我剛剛開始在我的應用程序中使用片段,這個想法是一列用於某個寬度(或更少)的屏幕,另一列用於更寬的屏幕。所以我有兩個獨立的佈局文件,並且在MainActivity的onCreate方法中,我根據屏幕寬度選擇顯示哪一個。由於我對屏幕寬度感興趣,而不是方向,所以我不能使用'layout-land'這個更簡單的選項。這兩個佈局使用相同的片段,但它們不能被硬編碼到佈局文件中,因爲它們中的一些需要在運行時添加和刪除,因此我在onCreate方法中使用片段事務(目前)添加片段。您如何確定在多個佈局之間切換的活動上次使用哪個佈局?

問題出現在活動被破壞和重新創建時。如果我不檢查savedinstancestate是否爲空,它會再次添加這些片段(這是預期的),並且所有內容都加倍。但是,如果我只在創建代碼的時候是空的 - 就像只有一個佈局一樣 - 那麼當我再次測試屏幕寬度並使用setContentView(一個或另一個佈局)時,它會重新創建顯示沒有問題的代碼但另一個是空白的。這也是可以預料的,因爲第二個還沒有實例化。那麼是否有可能通過已保存的實例狀態確定當活動被銷燬時哪個佈局正在使用?如果是這樣,是否有可能(或安全)使用該信息創建其他佈局 - 或者我應該再次運行創建代碼?換句話說,標準的savedinstancestate在使用多個佈局時會持續存儲我需要的所有數據,還是我必須自己做這一切?

回答

0

您仍然可以使用資源桶來包含您的佈局。即:

使用/ layout-sw600dp /即600浸

的佈局最小寬度從官方文件 http://developer.android.com/training/multiscreen/screensizes.html#TaskUseSWQuali

RES /佈局/ main.xml中,單窗格(默認)佈局:

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    android:orientation="vertical" 
    android:layout_width="match_parent" 
    android:layout_height="match_parent"> 

    <fragment android:id="@+id/headlines" 
       android:layout_height="fill_parent" 
       android:name="com.example.android.newsreader.HeadlinesFragment" 
       android:layout_width="match_parent" /> 
</LinearLayout> 

RES /佈局sw600dp/main.xml中,兩窗格佈局:

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    android:layout_width="fill_parent" 
    android:layout_height="fill_parent" 
    android:orientation="horizontal"> 
    <fragment android:id="@+id/headlines" 
       android:layout_height="fill_parent" 
       android:name="com.example.android.newsreader.HeadlinesFragment" 
       android:layout_width="400dp" 
       android:layout_marginRight="10dp"/> 
    <fragment android:id="@+id/article" 
       android:layout_height="fill_parent" 
       android:name="com.example.android.newsreader.ArticleFragment" 
       android:layout_width="fill_parent" /> 
</LinearLayout> 
+0

感謝隊友,這看起來不錯:-)我很高興我對片段的第一次體驗不需要很長的時間來進入保存我自己的實例狀態的本質。我放棄了所有這些佈局土地等東西,認爲它看起來有點太籠統,但很高興看到你可以更具體地使用它。 :-) –

+0

你可以非常具體地描述一些像'/ values-port-sw300dp-enUS /'享受的東西! – Blundell

+0

一個簡單的問題,但是......我能夠使用這種方法動態地添加和刪除片段,還是必須在各自的佈局文件中定義它們?如果我可以動態更改片段,系統會保存佈局更改之間的狀態嗎? –