我在为 ICS 使用片段时有些挣扎。我有一个片段(称为 AnalysisFragment),它进行了大量的数字运算工作,读入一个文件,然后对其执行一些计算。大部分工作都是在 onActivityCreated 中启动的,因为我需要在工作之前查阅应用程序的设置文件,而这又需要有上下文,它可以通过 Activity 访问,在调用 onActivityCreated 之前不一定可用。
好吧,每当我旋转显示器时,这项工作似乎又完成了(两次!)。在我的 LogCat 中,我看到 onDestroyView 和 onDestroy 发生(一次),然后是 onCreate、onCreateView 和 onActivityCreated(两次),它们都与 AnalysisFragment 相关。
显然,为不同方向重新绘制屏幕的工作必须重新完成,但有什么办法可以避免第二次(更不用说第三次)的数字运算工作?
我可能应该补充一点,每当用户选择要分析的新文件时,我都会实例化 AnalysisFragment 的新副本,如下所示
public static AnalysisFragment newInstance
(
String ndsFileName,
ViewIndicator viewIndicator
)
{
AnalysisFragment analysisFragment = new AnalysisFragment( );
Bundle bundle = new Bundle( );
bundle.putString( "nds_file_name", ndsFileName );
bundle.putString( "view_indicator", viewIndicator.toString( ) );
analysisFragment.setArguments( bundle );
return analysisFragment;
}
但是,在重新定位期间,Android 必须为我做这件事。关闭我创建的实例后,它会使用相同的捆绑包为新的屏幕方向实例化另一个实例。最终,onActivityCreated 在新实例上被调用,我的代码不再读取它刚才读取的同一个文件并重新进行数字运算。
任何见解将不胜感激...