我在一个页面上工作,我有三个按钮像tab一样工作,当点击其中一个时,行为应该是下面的FrameLayout(Fragment容器)应该用预期的一个替换片段。
在活动的 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 :(得分:0)
。在实施之前,你应该控制你的frament是否为null并将其添加到容器中。如果您的片段是实例化的,您应该只显示它。如果单击一个按钮,则使用上面提到的技巧管理显示所需的片段,然后隐藏其他片段。 你应该使用android的ActionBar功能。并使用Tab代替您的按钮。 onTabSelected()onTabUnselected()分别管理Tab上的操作,如附加或分离片段。一切都在android开发者论坛中详细说明。这是网址http://developer.android.com/guide/topics/ui/actionbar.html,因此请转到&#34;添加导航标签&#34;完整的解释一个例子。
以下是使用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;
.
.
.
}
}