为什么片段在android中的标签导航或屏幕旋转期间相互冲突

时间:2013-09-10 19:37:40

标签: android android-layout android-fragments

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

显示如下: enter image description here

2 个答案:

答案 0 :(得分: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      
    }       
}

答案 1 :(得分: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();

从我问过的问题中查看此链接

Replacing a ListFragment shows the previous list on top of the new one

你也在呼叫ft.add(android.R.id.content,mFragment, mTag);,它正在彼此之上添加一个片段