Android 片段分离
Posted
技术标签:
【中文标题】Android 片段分离【英文标题】:Android Fragment detach 【发布时间】:2014-10-06 12:28:07 【问题描述】:我有一个包含两个片段的活动。一个片段以纵向显示,另一个以横向模式显示。片段是用 java 添加的。
Fragment fragment = null;
if (this.getResources().getConfiguration().orientation == Configuration.ORIENTATION_PORTRAIT)
fragment = new FragmentPortrait();
else
fragment = new FragmentLandscape();
if (fragment != null)
addFragment(fragment, savedInstanceState == null);
private void addFragment(Fragment fragment, boolean add)
FragmentManager fragmentManager = getSupportFragmentManager();
FragmentTransaction fragmentTransaction = fragmentManager
.beginTransaction();
detachFragment("fragment");
if (add)
fragmentTransaction.add(R.id.layoutForFragment, fragment,
"fragment");
else
fragmentTransaction.replace(R.id.layoutForFragment,
fragment, "fragment");
fragmentTransaction.commit();
private void detachFragment(String fragmentTag)
Fragment fragment = getSupportFragmentManager().findFragmentByTag(
fragmentTag);
if (fragment != null)
Log.i(TAG, "detaching");
getSupportFragmentManager().beginTransaction().remove(fragment)
.commit();
我的问题是,如果我在纵向模式下开始我的活动,并且当我旋转屏幕时,横向片段会按预期显示,但纵向片段中的 onActivityCreated 也会被调用。这意味着肖像片段仍然存在。你能告诉我我的错误在哪里吗?
【问题讨论】:
您不需要手动分离碎片。尝试替换它们。 【参考方案1】:Keep it simple
:: Replacing Fragment
= Removing Current Fragment
+ Adding New Fragment
Sample
:: 用saveInstance
和其他东西修改你的需求
Boolean mFlag=false;
Fragment fragment = null;
if (this.getResources().getConfiguration().orientation == Configuration.ORIENTATION_PORTRAIT)
if(mFlag==false)
FragmentPortrait();
mFlag=true;
else
if(mFlag==true)
FragmentLandscape();
mFlag=false;
FragmentPortrait()
// Perform Action:: Replacing a fragment with the fragment you want to add in Portrait
FragmentLandscape()
// Perform Action:: Replacing a fragment with the fragment you want to add in Landscape
【讨论】:
我之前没有分离方法,但注意到了这个问题并尝试了它,但它仍然不起作用..我会修复我的代码,但是当我改变时你能告诉我(对于例如)从纵向到横向为什么还要调用纵向的onActivityCreated? @Crash-ID ....onActivityCreated
将被调用,因为片段被销毁并创建! .......但我不知道为什么OnOrientation
从纵向变为横向为什么肖像的onActivityCreated
也被称为........如果你想通过限制来防止这种尝试使用flags
...因为全局变量在OnOrientation
类中没有被破坏,改变! ......检查编辑! .... 希望对您有所帮助 ...Note-
根据您的需要修改标志设置!以上是关于Android 片段分离的主要内容,如果未能解决你的问题,请参考以下文章