fragment的切换与隐藏(无需重建)

来源:互联网 发布:java template模板 编辑:程序博客网 时间:2024/06/16 15:57

一、结合RadioButton使用

1、默认展示主页的fragment

private void initBaseViews(){    mFragmentManager = getSupportFragmentManager();    mFragmentManager.beginTransaction().add(R.id.relativeLayout, mMianFragment).commit();}
2、RadioButton的点击监听事件(FragmentTransaction只能commit一次,否则,会导致 

java.lang.IllegalStateException: commit already called

因此,只能作为局部变量,每次commit之前都需要调用FragmentManager.beginTransaction())

每次按下RadioButton时,都需要先隐藏所有的fragment,然后再展示其中的某一个

@Overridepublic void onCheckedChanged(RadioGroup radioGroup, int i) {    FragmentTransaction transaction = mFragmentManager.beginTransaction();    hideFragments(transaction);    switch (i) {        case R.id.radioButton_main:            if (mMianFragment == null) {                mMianFragment = MainFragment.newInstance();                transaction.add(R.id.relativeLayout, mMianFragment);            } else {                transaction.show(mMianFragment);            }            break;        case R.id.radioButton_order:            if (mOrderFragment == null) {                mOrderFragment = OrderFragment.newInstance();                transaction.add(R.id.relativeLayout, mOrderFragment);            } else {                transaction.show(mOrderFragment);            }            break;        case R.id.radioButton_discovery:            if (mDiscoveryFragment == null) {                mDiscoveryFragment = DiscoveryFragment.newInstance();                transaction.add(R.id.relativeLayout, mDiscoveryFragment);            } else {                transaction.show(mDiscoveryFragment);            }            break;        case R.id.radioButton_mine:            if (mMineFragment == null) {                mMineFragment = mMineFragment.newInstance();                transaction.add(R.id.relativeLayout, mMineFragment);            } else {                transaction.show(mMineFragment);            }            break;    }    transaction.commit();}
3、fragment的隐藏

private void hideFragments(FragmentTransaction transaction) {    if (mMianFragment != null) {        transaction.hide(mMianFragment);    }    if (mOrderFragment != null) {        transaction.hide(mOrderFragment);    }    if (mDiscoveryFragment != null) {        transaction.hide(mDiscoveryFragment);    }    if (mMineFragment != null) {        transaction.hide(mMineFragment);    }}

二、结合viewpager使用

1、构建viewpager的适配器(继承自FragmentPagerAdapter)

public class AdapterViewPager extends FragmentPagerAdapter {    private List<Fragment> fragmentList;    public AdapterViewPager(FragmentManager fm, List<Fragment> fragmentList) {        super(fm);        this.fragmentList = fragmentList;    }    @Override    public Fragment getItem(int position) {        return fragmentList.get(position);    }    @Override    public int getCount() {        return fragmentList.size();    }}
2、给viewpager设置适配器(viewpager一般搭配tablayout使用,这里没做设置)

private void initBaseViews() {    List<Fragment> fragmentList = new ArrayList<>();    mInternalFragment = new InternalFragment();    mAbroadFragment = new AbroadFragment();    fragmentList.add(mInternalFragment);    fragmentList.add(mAbroadFragment);    AdapterViewPager adapter = new AdapterViewPager(getActivity().getSupportFragmentManager(), fragmentList);    mViewPager.setAdapter(adapter);}

原创粉丝点击