我试图更好地了解 FragmentManager 和 FragmentTransactions 以正确开发我的应用程序。特别是关于它们的生命周期,以及提交 FragmentTransaction(add) 的长期影响。我对此感到困惑的原因是当我运行示例活动时,列在帖子末尾。
我特意创建了一个名为 fragMan 的静态 FragmentManager 变量,并最初将其设置为 null。然后在 onCreate() 中检查它是否为 null,当看到 null 值时,将 fragMan 变量设置为 getFragmentManager() 返回值。在配置更改期间,Log.d 显示 fragma 不为空,但在 fragman 中找不到之前添加的 Fragment “CameraFragment”,并且 fragman.isDestroyed() 返回 true。对我来说,这意味着 Activity.getFragmentManager() 返回了一个新的 FragmentManager 实例,并且 fragMan 中的旧 FragmentManager 实例的数据被擦除了(?)
这就是混乱的来源。
1)“CameraFragment”如何在配置更改的 Activity 中仍然关联并在 FragmentManager 的新实例中找到?
2)当我点击手机上的后退按钮退出活动时,然后我使用应用程序菜单重新启动了示例活动。CameraFragment 不再可见,并且
onCreate() 检查显示 fragMan 仍然不为空。我认为点击后退按钮称为默认完成()命令,从内存中清除 Activity 并重新启动它会产生与示例 Activity 的初始启动相同的结果?
感谢您提供的所有帮助!
public class MainActivity extends Activity
{
static FragmentManager fragMan = null;
FragmentTransaction fragTransaction;
@Override
protected void onCreate(Bundle savedInstanceState)
{
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
if (fragMan != null)
{
Log.d("log", Boolean.toString(fragMan.isDestroyed()));
if(fragMan.findFragmentByTag("Camera Preview") == null)
{
Log.d("log", "Camera Preview not found.");
}
}
else
{
fragMan = getFragmentManager();
fragTransaction = fragMan.beginTransaction();
Fragment cameraFragment = new CameraFragment();
ViewGroup root_view = (ViewGroup) findViewById(android.R.id.content);
fragTransaction.add(root_view.getId(), cameraFragment, "Camera Preview");
fragTransaction.commit();
}