我的活動使用片段在縱向和橫向上使用雙窗格佈局。我希望系統在方向更改後恢復所有視圖,但我不知道從哪裏開始。如果活動佈局更改,則在配置更改後恢復片段狀態
考慮到兩個方向的佈局不同(但相似),這甚至可能嗎?
如果有人已經實施了這個(或至少嘗試過),請分享你的經驗。
我的活動使用片段在縱向和橫向上使用雙窗格佈局。我希望系統在方向更改後恢復所有視圖,但我不知道從哪裏開始。如果活動佈局更改,則在配置更改後恢復片段狀態
考慮到兩個方向的佈局不同(但相似),這甚至可能嗎?
如果有人已經實施了這個(或至少嘗試過),請分享你的經驗。
@Override
public void onSaveInstanceState(Bundle outState) {
super.onSaveInstanceState(outState);
outState.putInt("curChoice", mCurCheckPosition);
}
,你以後可以使用這樣的:
@Override
public void onActivityCreated(Bundle savedInstanceState) {
super.onActivityCreated(savedInstanceState);
if (savedInstanceState != null) {
// Restore last state for checked position.
mCurCheckPosition = savedInstanceState.getInt("curChoice", 0);
}
}
也許我知道是什麼問題。希望我的回答有助於某人想要解決這個問題。 如果有你的活性的片段,你的配置在AndroidManifest.xml該活動與
android:configChanges="keyboardHidden|orientation|screenSize"
那麼,要更改活動的佈局時觸發onConfigurationChanged
。一旦活動膨脹一個新的佈局或使用setContentView(R.layout.new_layout);
,片段將消失,但是,該片段仍在運行,並從視圖中消失。
所以問題是,片段連接到以前的佈局,你需要做什麼:
FragmentManager fm = getSupportFragmentManager();
FragmentTransaction transaction = fm.beginTransaction();
if (fm.findFragmentById(R.id.pane_list) == null) {
// instantiate fragment and add to view
mFragment = new ItemFragment();
transaction.add(R.id.pane_list, mFragment);
} else {
// fragment already exists, we re-attahced it
mFragment = fm.findFragmentById(R.id.pane_list);
transaction.detach(mFragment);
transaction.attach(mFragment);
}
transaction.commit();
從舊佈局卸下並安裝到新的佈局,解決問題後。如果有任何錯誤:)
android:configChanges不被Google工程師推薦。 – 2013-08-19 14:14:37
我勸你在的onCreate方法使用一個片段與setRetainInstance(真) 指正。這會使片段在整個活動配置更改中保留其成員變量。請閱讀以下博客文章,其中解釋了您需要的信息: http://www.androiddesignpatterns.com/2013/04/retaining-objects-across-config-changes.html
對不起,我的意思是,如果系統可以恢復所有視圖。但我認爲你的解決方案可能是最接近的。 – 2013-03-01 23:12:12