2016-10-23 32 views
2

更新 好吧,我想出了什麼是問題。我試圖通過標籤查找片段,但是當我將它添加到適配器時,我無法爲片段設置標籤。 但我不知道如何添加。將片段從查看尋呼機移動到另一個容器

我在我的應用程序中使用橫向和縱向。景觀佈局包含兩個constrait佈局,肖像佈局包含一個帶有片段狀態尋呼機的視圖頁面。我有一個帶有回收器視圖的碎片和另一個帶有餅圖的碎片。當我將手機從陸地旋轉到縱向時,我得到一個異常,片段容器具有不同的ID,因此在我再次添加它之前從片段管理器中刪除片段。它解決了這個異常,但在這種情況下,我無法保留回收視圖的狀態。 我如何才能

+0

按狀態表示,滾動位置?或者你不想加載回收商的所有數據? – Farhan

+0

你是否嘗試過我在我的回答中提到的內容? setRetainInstance? – Farhan

+0

我嘗試了,但在這種情況下,我得到這個異常: java.lang.RuntimeException:無法啓動活動ComponentInfo {hu.astron.rectruiting/hu.astron.rectruiting.MainActivity}:java.lang.IllegalArgumentException:No view找到ID爲0x7f0b005a(hu.astron.rectruiting:id/pager)的片段PersonsFragment {f9530d7#0 id = 0x7f0b005a} – user3057944

回答

0

最後我想出了問題所在。 在將片段添加到尋呼機之前,我必須通過添加(fragment,tag)來設置標籤。 這是錯誤的,我沒有設置標籤的片段,所以當我試圖通過標籤找到片段,它是空的,我總是Cretaed一個新的實例。

0

好的,如果你想停止你的應用程序重新創建方向更改。將此行android:configChanges="orientation|screenSize"添加到您在AndroidManifest.xml文件中的活動中。此行停止應用程序在方向更改時重新創建,它只是改變方向而已。

<activity android:name=".MainActivity" 
    android:configChanges="orientation|screenSize" > 
    <intent-filter> 
     <action android:name="android.intent.action.MAIN" /> 
     <category android:name="android.intent.category.LAUNCHER" /> 
    </intent-filter> 
</activity> 
+0

沒有重新創建,他如何使用不同的佈局來進行橫向和縱向? – Farhan

+0

謝謝,我的問題是不保留片段狀態。 我的問題,我不能將我的片段添加到容器,我沒有調用fragmentManager.remove()將其添加到FragmentStatePagerAdapter後。 但是,您可以通過覆蓋 onConfigurationChanged()方法來處理方向更改 – user3057944

+0

@Farhan,是的,我的壞,沒有考慮到這一點。 – FARID

0

我不知道到底,不過這個功能說,它將保留片段狀態。你可能想試試這個:

setRetainInstance 

Android Docs

它不會破壞,只有重建片段。

+0

謝謝,但我的問題不完全與保留片段狀態,我不能將它添加到一個容器後,我將其添加到尋呼機。 – user3057944

+0

是啊,同樣的片段不能被放入兩個視圖。據我所知 – Farhan

0

我想保留滾動位置。應用程序開始縱向,所以我添加片段到FragmentStatePager, 比我切換到橫向,我打電話fragmentManager.replace(片段,contraintContainer,標記), 和比如果我切換回肖像,我不刪除它片段管理器我得到這個異常: java.lang.IllegalStateException:無法更改片段的容器ID PersonsFragment {9726278#2 id = 0x7f0b005b persons}:was 2131427419 now 2131427418 但如果我調用fragmentManager.remove()I無法保留滾動位置。

相關問題