android fragment切换
1、调用方式
xml布局
<FrameLayout
android:layout_width="match_parent"
android:layout_height="match_parent"
android:id="@+id/frame_layout"
></FrameLayout>
调用代码
Fragment1 fragment1;
if(fragment1 == null) {
fragment1 = new Fragment1();
}
switchFragment(fragment1);
2、函数
- show/add方式,切换后不重载
Fragment currentFragment;
/**
* @method switchFragment
* @description fragment切换,切换方式为 show/hide
* @date: 2020-02-13 15:50
* @author: ccc
* @param fragment
* @return void
*/
private void switchFragment(Fragment fragment) {
//开启fragment事务
FragmentTransaction fragmentTransaction = getSupportFragmentManager().beginTransaction();
//判断当前显示的fragment是否为空,不为空则隐藏
if(currentFragment != null)
fragmentTransaction.hide(currentFragment);
//判断需要显示的fragment是否已经添加过,添加过 show 没添加过 add
if (fragment.isAdded()){
fragmentTransaction.show(fragment);
System.out.println("is ready add");
}else{
fragmentTransaction.add(R.id.frame_layout,fragment);
System.out.println("is not add");
}
fragmentTransaction.commit();
//将当前显示的fragment 赋给 currentFragment
currentFragment = fragment;
}
- replace方式,切换后销毁原fragment
/**
* @method switchFragment
* @description fragment切换,切换方式为 replace
* @date: 2020-02-13 15:50
* @author: ccc
* @param fragment
* @return void
*/
private void switchFragment(Fragment fragment) {
//开启fragment事务
FragmentTransaction fragmentTransaction = getSupportFragmentManager().beginTransaction();
//切换的时候需重启加载fragment时使用replace
fragmentTransaction.replace(R.id.frame_layout,fragment).commit();
}