我的活动使用片段在纵向和横向上使用双窗格布局。我希望系统在方向更改后恢复所有视图,但我不知道从哪里开始。如果活动布局更改,则在配置更改后恢复片段状态
考虑到两个方向的布局不同(但相似),这甚至可能吗?
如果有人已经实施了这个(或至少尝试过),请分享你的经验。
我的活动使用片段在纵向和横向上使用双窗格布局。我希望系统在方向更改后恢复所有视图,但我不知道从哪里开始。如果活动布局更改,则在配置更改后恢复片段状态
考虑到两个方向的布局不同(但相似),这甚至可能吗?
如果有人已经实施了这个(或至少尝试过),请分享你的经验。
@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