0

Iam工作在一个页面上,我有三个按钮像标签一样工作,当点击其中一个按钮时,行为应该是下面的FrameLayout(片段容器)应该用预期的替换片段一。FragmentTransaction替换只能工作一次

enter image description here

的onCreate活性我有此方法的

,所以容器示出了第一片段,(这工作正常):

ProductDetailInformacoesFragment infoFragment = new ProductDetailInformacoesFragment(); 
FragmentTransaction ft = getSupportFragmentManager().beginTransaction(); 
ft.replace(R.id.product_detail_fragment_container, infoFragment); 

然后我有一个switch语句即呼叫不同听众的按钮,所以显示正确的片段:

public void switchFragment(int fragmentPos) 
{ 
    switch (fragmentPos){ 
     case 0: 
      ProductDetailInformacoesFragment infoFragment = new ProductDetailInformacoesFragment(); 
      FragmentTransaction ft = getSupportFragmentManager().beginTransaction(); 
      ft.replace(R.id.product_detail_fragment_container, infoFragment); 
      ft.commit(); 
      break; 

     case 1: 
      ProductDetailCaracteristicasFragment caracteristicasFragment = new ProductDetailCaracteristicasFragment(); 
      FragmentTransaction ftt = getSupportFragmentManager().beginTransaction(); 
      ftt.replace(R.id.product_detail_fragment_container, caracteristicasFragment); 
      ftt.commit(); 
      break; 
     case 2: 
      ProductDetailAvaliacoesFragment avaliacoesFragment = new ProductDetailAvaliacoesFragment(); 
      FragmentTransaction fttt = getSupportFragmentManager().beginTransaction(); 
      fttt.replace(R.id.product_detail_fragment_container, avaliacoesFragment); 
      fttt.commit(); 
      break; 
     default: 
      break; 
    } 
} 

XML:

  <FrameLayout 
      android:id="@+id/product_detail_fragment_container" 
      android:layout_width="fill_parent" 
      android:layout_height="wrap_content" 
      android:layout_below="@+id/base_view" 
      android:background="@android:color/white"/> 

问题是当我在其中一个选项卡单击,片段容器成为空(白)和所需的片段没有显示,无论我点击其中一个(甚至是一个已经示出)。 我在做什么错? - 我试过设置ft.addToBackStack(null)没有帮助。

回答

0

。您应该控制在instanciate之前您的frament是否为null并将其添加到容器中。如果你的片段是instanciated你应该简单地显示它。如果点击一个按钮,管理使用上面提到的技巧显示所需的片段,然后隐藏其他片段。 你应该使用android的ActionBar功能。并使用Tab而不是按钮。 onTabSelected()onTabUnselected()分别管理Tab上的操作,如附加或分离碎片。一切都在android developper论坛中详细介绍。这里是网址http://developer.android.com/guide/topics/ui/actionbar.html,所以请点击“添加导航选项卡”一节以获得完整的解释示例。

这里的代码使用AndroidSupport

public void onTabSelected(Tab tab, FragmentTransaction fT) { 
    FragmentTransaction ft = getSupportFragmentManager().beginTransaction(); 
    switch (tab.getPosition()) { 
    case your_tab_position: 
     if(your_fragment == null){ 
      your_fragment = new Your_fragment(); 
      ft.add(R.id.your_container, your_fragment, your_tag); 
     } 
     else{ 
      ft.show(your_fragment); 
      } 

     break; 
. 
. 
. 
} 
} 

public void onTabUnselected(Tab tab, FragmentTransaction fT) { 
    FragmentTransaction ft = getSupportFragmentManager().beginTransaction(); 

    switch (tab.getPosition()) { 
    case your_tab_position: 
     if(your_fragment != null){ 
      ft.hide(your_fragment); 
     } 
     break; 
. 
. 
. 
} 
} 
管理的选择和你的标签去除选择概述