如何防止一次又一次地重新摧毁新碎片?

时间:2016-03-14 06:15:12

标签: android android-fragments android-tablayout

你好我在Android中制作了一个简单的程序,我在tablayout中选择3个Tabs当我点击第一个选项卡时它首先打开Fragment但是当我进入第二个Tab然后再次来到第一个TAb选择它重新创建并重叠我的新片段。 ..现在如何制止?

protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);

    TabLayout tabLayout = (TabLayout) findViewById(R.id.tablayout);
    tabLayout.addTab(tabLayout.newTab().setText("One"), true);
    tabLayout.addTab(tabLayout.newTab().setText("Two"), false);

    tabLayout.setOnTabSelectedListener(new TabLayout.OnTabSelectedListener() {                                                      
            @Override
        public void onTabSelected(TabLayout.Tab tab) {
            if (tab.getPosition() == 0) {
                Fragment fragment = new Fragment1();

                chageFragment(fragment);
            } 

        }

        @Override
        public void onTabUnselected(TabLayout.Tab tab) {

        }

        @Override
        public void onTabReselected(TabLayout.Tab tab) {

        }
    });

  }

private void chageFragment(Fragment fragment) {
     getFragmentManager().beginTransaction().add(R.id.container,    fragment,fragment.getClass().getSimpleName()).commit();
}

3 个答案:

答案 0 :(得分:1)

尝试更改此行以使用replace代替add

getFragmentManager().beginTransaction().add(R.id.container, fragment, fragment.getClass().getSimpleName()).commit();

应该是

getFragmentManager().beginTransaction().replace(R.id.container, fragment, fragment.getClass().getSimpleName()).commit();

答案 1 :(得分:0)

如果您不希望重新创建片段,那么您应该使用视图寻呼机。它可以用作制表符,片段不会重新创建,也不会重叠。如果你想解决重叠问题,那么Kevin在这里给出了正确答案。

答案 2 :(得分:0)

使用替换而不是添加方法,它将解决您的问题。

getFragmentManager()。beginTransaction()。replace(R.id.container,fragment,fragment.getClass()。getSimpleName())。commit();