。这是因为BottomNavigationView默认使用的是FragmentTransaction的replace方法来切换片断,该方法会销毁当前片断并创建新的片断实例。
为了避免片断重新启动,可以使用FragmentTransaction的hide和show方法来切换片断。具体步骤如下:
这样,当切换菜单项时,片断不会重新创建,而是保持之前的状态。
下面是一个示例代码:
// 创建BottomNavigationView
BottomNavigationView bottomNavigationView = findViewById(R.id.bottom_navigation_view);
// 设置菜单项点击监听器
bottomNavigationView.setOnNavigationItemSelectedListener(item -> {
FragmentTransaction transaction = getSupportFragmentManager().beginTransaction();
switch (item.getItemId()) {
case R.id.menu_item1:
// 使用hide和show方法切换片断的可见性
transaction.hide(fragment2);
transaction.show(fragment1);
break;
case R.id.menu_item2:
transaction.hide(fragment1);
transaction.show(fragment2);
break;
}
transaction.commit();
return true;
});
// 创建片断实例
Fragment1 fragment1 = new Fragment1();
Fragment2 fragment2 = new Fragment2();
// 将片断添加到片断容器中
FragmentTransaction transaction = getSupportFragmentManager().beginTransaction();
transaction.add(R.id.fragment_container, fragment1);
transaction.add(R.id.fragment_container, fragment2);
transaction.commit();
在上述示例中,R.id.bottom_navigation_view是BottomNavigationView的ID,R.id.fragment_container是片断容器的ID。Fragment1和Fragment2分别是要切换的两个片断。
这样,使用导航组件实现的BottomNavigationView在切换片断时就不会重新启动片断,而是保持之前的状态。
领取专属 10元无门槛券
手把手带您无忧上云