gpt4 book ai didi

android - 屏幕方向更改后, fragment (支持的库)在 onActivityCreated() 中看不到 Activity

转载 作者:搜寻专家 更新时间:2023-11-01 08:09:52 24 4
gpt4 key购买 nike

我正在使用 Android 支持库 v13。有一件奇怪的事情我无法理解。

创建新 Activity 时,我将 fragment 加载为:

主要 Activity 布局:

...
<FrameLayout
android:id="@+id/fragment_1"
... />

在主要 Activity 的 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 手机。

但有一个异常(exception):如果应用程序正在运行,并且屏幕方向发生了变化。在 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- 您可以 try catch 方向变化并在那里编写一些代码以尝试防止因方向变化而导致的问题:

@Override
public void onConfigurationChanged(Configuration newConfig) {
super.onConfigurationChanged(newConfig);
setContentView(R.layout.main);
// etc.
}

2- 或者通过添加以下内容来防止在您的 list 中完全改变方向:android:screenOrientation="portrait"
到您的主要 Activity 标签,以阻止此问题再次发生.. 也就是说,如果您愿意防止方向改变。

我通常为我的应用程序使用选项 2,因为方向改变往往会导致各种问题。

旁注:我看到有人说他们将 android:configChanges="orientation|keyboardHidden" 添加到他们的主要 Activity 的 list 中,以解决一些方向问题,所以这可能值得一试

关于android - 屏幕方向更改后, fragment (支持的库)在 onActivityCreated() 中看不到 Activity ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10854020/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com