实现的效果图:
遇到的问题,之前往FrameLayout中添加Fragment是通过replace去添加的
getSupportFragmentManager().beginTransaction().addToBackStack(null).replace(R.id.framelayout, fragment).commit();
但是出现了Fragment一切换就重新创建的问题,后来采用了add去添加的方式,让Fragment只添加一次,首先对Fragment进行隐藏,然后再去添加Fragment,添加过后再次切换时去判断Fragment是否已经存在了,存在就去显示,不存在则创建。
上代码一看便知
public class MainActivity extends BaseActivity {
private static final String TAG = "MainActivity";
private BottomNavigationBar mBottomNavigationBar;
private FrameLayout framelayout;
private int lastSelectedPosition = 0;
private WarningMonitoringFragment warningInquireFragment;
private DataInquireFragment dataInquireFragment;
private PersonalSettingFragment personalSettingFragment;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
initView();
initData();
}
private void initView() {
framelayout = findViewById(R.id.framelayout);
mBottomNavigationBar = findViewById(R.id.bottom_navigation);
setBottomNavigationBar();
}
private void initData() {
}
/**
* 设置BottomNavigationBar属性
*/
private void setBottomNavigationBar() {
// TODO 设置模式
mBottomNavigationBar.setMode(BottomNavigationBar.MODE_FIXED);
// TODO 设置背景色样式
mBottomNavigationBar.setBackgroundStyle(BottomNavigationBar.BACKGROUND_STYLE_STATIC);
mBottomNavigationBar.setBarBackgroundColor(R.color.bottombarback);
mBottomNavigationBar
.addItem(new BottomNavigationItem(R.mipmap.yujingjiankong_img_unselect, "预警监控").setActiveColorResource(R.color.selecttextcolor).setInactiveIconResource(R.mipmap.yujingjiankong_img_select).setInActiveColorResource(R.color.unselecttextcolor))
.addItem(new BottomNavigationItem(R.mipmap.shujuchaxun_img_unselect, "资讯").setActiveColorResource(R.color.selecttextcolor).setInactiveIconResource(R.mipmap.shujuchaxun_img_select).setInActiveColorResource(R.color.unselecttextcolor))
.addItem(new BottomNavigationItem(R.mipmap.gerenshezhi_img_unselect, "我的").setActiveColorResource(R.color.selecttextcolor).setInactiveIconResource(R.mipmap.gerenshezhi_img_select).setInActiveColorResource(R.color.unselecttextcolor))
.setFirstSelectedPosition(lastSelectedPosition)
.initialise();
/**
* 从这里开始
*/
//实例化默认显示的WarningMonitoringFragment
warningInquireFragment = new WarningMonitoringFragment();
addFragment(warningInquireFragment);
mBottomNavigationBar.setTabSelectedListener(new BottomNavigationBar.OnTabSelectedListener() {
@Override
public void onTabSelected(int position) {
lastSelectedPosition = position;
hideFragment();
switch (position) {
case 0:
if (warningInquireFragment!=null){
showFragment(warningInquireFragment);
}
break;
case 1:
//Fragment没添加过就去添加,添加过了,就直接显示
if (dataInquireFragment == null) {
//实例化DataInquireFragment
dataInquireFragment = new DataInquireFragment();
addFragment(dataInquireFragment);
} else {
showFragment(dataInquireFragment);
}
break;
case 2:
if (personalSettingFragment == null) {
//实例化PersonalSettingFragment
personalSettingFragment = new PersonalSettingFragment();
addFragment(personalSettingFragment);
} else {
showFragment(personalSettingFragment);
}
break;
}
}
@Override
public void onTabUnselected(int position) {
}
@Override
public void onTabReselected(int position) {
}
});
}
/**
* 添加Fragment
*/
private void addFragment(Fragment fragment) {
getSupportFragmentManager().beginTransaction().addToBackStack(null).add(R.id.framelayout, fragment).commit();
}
/**
* 显示Fragment
*/
private void showFragment(Fragment fragment) {
getSupportFragmentManager().beginTransaction().addToBackStack(null).show(fragment).commit();
}
/**
* 隐藏Fragment
*/
private void hideFragment() {
//再重新获取一个开启事务
FragmentTransaction fragmentTransaction = getSupportFragmentManager().beginTransaction();
//不等于空或者是否添加的时候
if (warningInquireFragment != null && warningInquireFragment.isVisible()) {
fragmentTransaction.hide(warningInquireFragment);
}
if (dataInquireFragment != null && dataInquireFragment.isVisible()) {
fragmentTransaction.hide(dataInquireFragment);
}
if (personalSettingFragment != null && personalSettingFragment.isVisible()) {
fragmentTransaction.hide(personalSettingFragment);
}
fragmentTransaction.commit();
}
}