解决fragment重叠的问题

其实没必要通过onSaveInstanceState(Bundle outState)获取之前的fragment,因为FragmentManager()本身就会帮我们保存fragment,因此重启时通过getSupportFragmentManager().getFragments()获取所有fragment即可,这样,解决fragment重启就变得很简单了

public class MainActivity extends AppCompatActivity implements View.OnClickListener {

    private FirstFragment firstFragment;
    private FourthFragment fourthFragment;
    private SecondFragment secondFragment;
    private ThirdFragment thirdFragment;
    private List<Fragment> fragments = new ArrayList<>();

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

        fragments = getSupportFragmentManager().getFragments();
        //判断FragmentManager里是否有添加fragment,没有的话重新添加,有的话说明是内存不足重启,则不需要重新添加fragment
        if(fragments.size()<=0)
            addFragment();

        findViewById(R.id.first).setOnClickListener(this);
        findViewById(R.id.second).setOnClickListener(this);
        findViewById(R.id.third).setOnClickListener(this);
        findViewById(R.id.fourth).setOnClickListener(this);

    }

    /**
     * 添加fragment
     */
    private void addFragment() {
        firstFragment = FirstFragment.newInstance();
        secondFragment = SecondFragment.newInstance();
        thirdFragment = ThirdFragment.newInstance();
        fourthFragment = FourthFragment.newInstance();
        fragments = new ArrayList<>();
        fragments.clear();
        fragments.add(firstFragment);
        fragments.add(secondFragment);
        fragments.add(thirdFragment);
        fragments.add(fourthFragment);

        FragmentTransaction transaction = getSupportFragmentManager().beginTransaction();
        for (Fragment f : fragments)
            transaction.add(R.id.frameLayout, f);
        transaction.commit();

        //显示第一个fragment
        showFragment(0);
    }

    @Override
    public void onClick(View v) {
        switch (v.getId()) {
            case R.id.first:
                showFragment(0);
                break;
            case R.id.second:
                showFragment(1);
                break;
            case R.id.third:
                showFragment(2);
                break;
            case R.id.fourth:
                showFragment(3);
                break;
        }

    }

    /**
     * 显示fragment
     * @param index
     */
    private void showFragment(int index) {
        if (fragments != null && fragments.size() > index) {
            int size = fragments.size();
            FragmentTransaction transaction = getSupportFragmentManager().beginTransaction();
            for (int i = 0; i < size; i++) {
                if (i == index) {
                    transaction.show(fragments.get(index));
                } else
                    transaction.hide(fragments.get(i));
            }
            transaction.commit();
        }
    }

}

猜你喜欢

转载自blog.csdn.net/jingzz1/article/details/85128647