0

我有两个片段的活动。一个片段以纵向显示,另一个以横向模式显示。片段用java添加。Android碎片分离

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

您不需要手动分离片段。试着替换它们。 – eleven 2014-10-06 12:44:01

回答

0

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 
     } 

} 
+0

我没有之前的分离方法,但注意到这个问题,并尝试使用它,但它仍然无法正常工作..我会修复我的代码,但是当我改变(例如)从纵向到横向时,你能告诉我为什么该肖像的onActivityCreated也被称为? – definera 2014-10-06 13:23:28

+0

@ Crash-ID ....'onActivityCreated'将被调用,因为片段被破坏并创建! .......但我不知道为什么'OnOrientation'从肖像变为风景,为什么人物的onActivityCreated也被称为........如果你想通过限制使用'flags' ...因为全局变量不会在'OnOrientation'类中被破坏! ......检查编辑! ....希望它可以帮助...'注意''修改标志设置以满足您的需求! – Devrath 2014-10-06 13:47:47