我正在尝试更好地理解FragmentManager和FragmentTransactions以正确开发我的应用程序。具体来说,涉及它们的生命周期,以及提交FragmentTransaction(add)的长期影响。我感到困惑的原因是我运行了一个示例Activity,该Activity在本文末尾列出。
我故意创建了一个静态的FragmentManager变量fragMan,并最初将其设置为null。然后,在onCreate()中检查了它是否为空值,当看到空值时,将fragMan变量设置为getFragmentManager()返回值。在配置更改期间,Log.d显示fragma不为空,但先前添加的碎片"CameraFragment"未在fragman中找到,而fragman.isDestroyed()返回true。这对我来说意味着Activity.getFragmentManager()返回FragmentManager的新实例,并且fragMan中的旧FragmentManager实例已被清除(?)
这就是混乱之处。
1) 在配置更改时,“CameraFragment”如何仍与Activity关联并在新的FragmentManager实例中找到?
2) 当我按下手机上的后退按钮退出Activity时,然后使用应用程序菜单重新启动示例Activity时,CameraFragment不再可见,并且onCreate()检查显示fragMan仍未空。我认为按下后退按钮会调用默认的finish()命令,从内存中清除Activity,重新启动它将产生与示例Activity的初始启动相同的结果?
非常感谢您提供的任何帮助!
我故意创建了一个静态的FragmentManager变量fragMan,并最初将其设置为null。然后,在onCreate()中检查了它是否为空值,当看到空值时,将fragMan变量设置为getFragmentManager()返回值。在配置更改期间,Log.d显示fragma不为空,但先前添加的碎片"CameraFragment"未在fragman中找到,而fragman.isDestroyed()返回true。这对我来说意味着Activity.getFragmentManager()返回FragmentManager的新实例,并且fragMan中的旧FragmentManager实例已被清除(?)
这就是混乱之处。
1) 在配置更改时,“CameraFragment”如何仍与Activity关联并在新的FragmentManager实例中找到?
2) 当我按下手机上的后退按钮退出Activity时,然后使用应用程序菜单重新启动示例Activity时,CameraFragment不再可见,并且onCreate()检查显示fragMan仍未空。我认为按下后退按钮会调用默认的finish()命令,从内存中清除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();
}