我已经尝试过在Google和Google上搜索,但我无法弄清楚这一点。任何帮助将不胜感激。
因此,我的应用程序由MainActivity
和多个Fragment
组成,并使用NavigationDrawer
。抽屉的实现与Android documentation for NavDrawer中一样(使用支持库v4)。点击左侧抽屉中的多个ListView
项目之一会加载Fragment
,如下所示(此代码位于MainActivity
中):
Fragment fragment = MyAmmunitionFragment.newInstance();
FragmentManager fragmentManager = getSupportFragmentManager();
fragmentManager.beginTransaction()
.replace(R.id.content_frame, fragment, MyAmmunitionFragment.Tag)
.addToBackStack(Tag)
.commit();
mLvLeftDrawer.setItemChecked(position, true);
setTitle(getString(R.string.my_ammunition));
mDrawerLayout.closeDrawer(mLvLeftDrawer);
我遇到的问题是当我旋转屏幕时。假设我的一个片段已加载,就像上面那个一样。如果屏幕旋转,则当前Fragment
消失,并显示“主屏幕”Fragment
。顺便说一下,当应用加载“{1}}加载”主屏幕“Fragment
时,如下所示:
Activity
我能够通过覆盖private void populateMainSummaryFragment(int position, boolean addToBackStack) {
Log.v(Tag, "populateMainSummaryFragment()");
Fragment fragment = MainSummaryFragment.newInstance();
FragmentManager fragmentManager = getSupportFragmentManager();
FragmentTransaction fragmentTransaction = fragmentManager.beginTransaction()
.replace(R.id.content_frame, fragment);
if (addToBackStack) {
fragmentTransaction.addToBackStack(Tag);
}
fragmentTransaction.commit();
mLvLeftDrawer.setItemChecked(position, true);
//setTitle(getString(R.string.app_name));
mDrawerLayout.closeDrawer(mLvLeftDrawer);
}
中的onSaveInstanceState()
并将数据存储在Fragment
中,然后从{{1}中的首选项加载来保存用户输入的任何文本}} SharedPreferences
方法。
我的问题是:如何在屏幕旋转时保存当前Fragment
本身(而不仅仅是用户可能输入的数据)?
目前,我决定将当前Fragment的标签保存在SharedPrefs中,然后在MainActivity的“onResume()”方法中从SharedPrefs读取并使用与上面相同的代码加载Fragment。它不是出于某种原因而工作,对我而言,它感觉就像一个hacky / crappy解决方案。但是,如果那就是必须要做的事情,那就这样吧。目前它没有用。
如果我可以提出第二个问题,如何在屏幕旋转时保存用户输入的数据,而不是当用户仅导航到另一个onResume()
时?此时,无论屏幕是旋转还是片段导航离开,用户输入的数据都会被保存。我认为它只是逻辑而不是某些特定的方法调用,但我没有看到解决方案。
非常感谢您的帮助!
答案 0 :(得分:2)
在Fragment
的{{1}}中保存当前Activity
课程的名称。在onSaveInstanceState()
的{{1}},
Activity
现在,要检查由于轮换而导致状态更改是,请使用以下命令:
创建一个类成员
onCreate()
在if(savedInstanceState != null){
/* get the name of the Fragment class that was previously saved
* and load that Fragment, instead of loading HomeFragment. */
}
中,使用
private int myOrientation;
之后,覆盖方法onCreate()
,在这里您可以检查方向是否实际发生了变化:
Display display = ((WindowManager)getSystemService(WINDOW_SERVICE)).getDefaultDisplay();
myOrientation = display.getOrientation();
试试这个。这将有效。