0

我在一个活动中有 3 个选项卡工作正常。但是当我从一个选项卡导航到另一个选项卡时,当前选项卡中的前一个选项卡内容视图。我无法弄清楚问题是什么?我在 LogCat 上没有收到错误消息,也没有 redFlags。有人可以帮我解决这个问题吗?

显示如下: 在此处输入图像描述

4

2 回答 2

0

我已经看到了我添加片段而不是替换它们的地方。看看你的 TabListener。这对我有用:

    class MyTabsListener implements ActionBar.TabListener {
    private Fragment fragment;


    public MyTabsListener(ListFragment fragment) {
        this.fragment = fragment;
    }

    @Override
    public void onTabSelected(Tab tab, FragmentTransaction ft) {
        Bundle bundle = new Bundle();
        bundle.putInt("Tab", tab.getPosition());
        fragment.setArguments(bundle);
        ft.replace(android.R.id.content, fragment);;    
    }


    @Override
    public void onTabUnselected(Tab tab, FragmentTransaction ft) {

        // Clear the backstack if another Tab is selected
        if (fragment != null) {
            FragmentManager fm = getSupportFragmentManager();
            if (fm.getBackStackEntryCount()>0) {
                fm.popBackStack(fm.getBackStackEntryAt(0).getName(), FragmentManager.POP_BACK_STACK_INCLUSIVE);
            }
            ft.remove(fragment);
        }           
    }


    @Override
    public void onTabReselected(Tab tab,FragmentTransaction ft) {
        // TODO Auto-generated method stub      
    }       
}
于 2013-09-10T19:53:27.700 回答
0

如果您想要动态片段,则不能在 xml 中静态声明片段,您需要一个占位符,例如框架,然后用该框架替换您的片段

例如

<FrameLayout
      android:id="@+id/map"
      android:layout_width="match_parent"
      android:layout_height="match_parent"/>

在你的活动中

FragmentTransaction ft = getFragmentManager().beginTransaction();
Fragment fragment = new NearMeFragment();
ft.replace(R.id.map, fragment).commit();

从我不久前提出的问题中检查此链接

替换 ListFragment 会在新列表之上显示上一个列表

你也在打电话ft.add(android.R.id.content,mFragment, mTag);,这是在彼此之上添加一个片段

于 2013-09-10T19:54:49.457 回答