Run*_*oop 5 android android-fragments
我有一个以编程方式添加的片段.然而,我发现在旋转之后,会创建一个新片段,但旧片段仍处于活动状态(虽然没有显示)我假设片段与旋转活动一起被销毁,但这不是这里的情况.什么可能导致我的片段被保留/不被破坏?请注意:
创建片段的代码:
MyFragment fragment = MyFragment();
FragmentManager fragmentManager = getFragmentManager();
FragmentTransaction fragmentTransaction = fragmentManager.beginTransaction();
fragmentTransaction.add(R.id.content_frame, fragment, "CurrentFragment");
fragmentTransaction.show(fragment).commit();
Run Code Online (Sandbox Code Playgroud)
删除片段的代码:
FragmentTransaction fragmentTransaction = fragmentManager.beginTransaction();
fragmentTransaction.remove(fragment).commit();
Run Code Online (Sandbox Code Playgroud)
更新:我无法确认这是否是问题,但片段在onCreate中注册为LocalBroadcast接收器.它在onDestroy中未注册广播,但似乎LocalBroadcast注册阻止调用onDestroy,或者在旋转时没有调用onDestroy.我现在在onStop中取消注册,这似乎解决了这个问题.
tha*_*sma 15
当由于方向更改而重新启动Activity时,Android Framework会自动为您重新创建并添加Fragment.你可能添加的片段在onCreate你的Activity.这是您在方向更改后添加其他片段的位置.
您必须检查是否已添加片段:
Fragment f = getFragmentManager().findFragmentById(R.id.content_frame);
if(f == null){
//Add it, there is no Fragment
}else{
//It's already there
}
Run Code Online (Sandbox Code Playgroud)
每次你添加添加片段的按钮时,都会添加一个新的片段.如果您的容器是FrameLayout,您可能不会看到它.尝试替换碎片:
fragmentTransaction.replace(R.id.content_frame, fragment, "CurrentFragment");
Run Code Online (Sandbox Code Playgroud)
该方法setRetainInstance(true)有另一个目的.如果启用它,则Fragment方向更改时不会销毁实例(但其视图将被销毁).这意味着您可以将数据存储在a的成员变量中,Fragment并且在方向更改后该数据仍然可用.
设置setRetainInstance(true)片段的生命周期时略有不同.即onCreate(),onDestroy()并没有被调用(因为那些事件没有发生)
| 归档时间: |
|
| 查看次数: |
7261 次 |
| 最近记录: |