我正在使用 Android 支持库 v13。有一件奇怪的事情我无法理解。
创建新活动时,我将片段加载为:
主要活动布局:
...
<FrameLayout
android:id="@+id/fragment_1"
... />
In onCreate()
主要活动:
mFragment = (FragmentActivity) getSupportFragmentManager().findFragmentById(R.id.fragment_1);
// if screen orientation changed, no need to create new instance of fragment
if (mFragment == null) {
mFragment = ...; // create new instance of fragment
FragmentTransaction ft = getSupportFragmentManager().beginTransaction();
ft.replace(R.id.fragment_1, mFragment);
// because this is called ONCE, we can use this method
ft.commitAllowingStateLoss();
}
现在,一切都可以在模拟器 1.5、1.6 和 2.2 中完美运行。我有电话2.2.2.
但有一个例外:如果应用程序正在运行,并且屏幕方向发生了变化。里面onActivityCreated()
, getActivity()
有时回报null
。这只发生在模拟器 1.5/1.6/2.2 中。
我的手机2.2.2工作得很好,我测试了数百次但从未发现这个错误。甚至其他模拟器 3.x、4.x 也能正常工作。不幸的是我没有电话 1.5/1.6/2.2。
那么你有这方面的经验吗?这是支持库或模拟器的错误吗?
更改 Android 设备方向会唤起您的onCreate
方法,我相信。结果,很容易发生奇怪的事情。您可以做两件事:
1-您可以尝试捕获方向更改并在那里执行一些代码,以尝试防止因方向更改而导致的问题:
@Override
public void onConfigurationChanged(Configuration newConfig) {
super.onConfigurationChanged(newConfig);
setContentView(R.layout.main);
// etc.
}
2- 或者通过添加以下内容来完全防止清单中的方向改变:android:screenOrientation="portrait"
到您的主要活动标签,以阻止此问题再次发生。也就是说,如果您愿意阻止方向改变。
我通常在我的应用程序中使用选项 2,因为方向改变往往会导致各种问题。
旁注:我见过有人说他们添加了android:configChanges="orientation|keyboardHidden"
他们的主要活动清单也可以解决一些定向问题,因此这也值得一试。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)