【发布时间】:2014-02-20 20:27:50
【问题描述】:
我正在尝试更好地了解 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) 当我点击手机上的后退按钮退出 Activity 时,我重新启动了示例
使用应用程序菜单的活动。 CameraFragment 不再可见,
onCreate() 检查显示 fragMan 仍然不为空。我以为按下后退按钮
调用默认的完成()命令,从内存中清除活动并重新启动它
会产生与示例 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();
}
【问题讨论】:
标签: android android-layout android-fragments android-framework