问题描述
我正在使用带有四个片段的底部导航视图,以避免重新生成片段,我正在使用以下代码段:
private void changeFragment(Fragment fragment,String tagFragmentName) {
FragmentTransaction ft = fm.beginTransaction();
Fragment currentFragment = fm.getPrimaryNavigationFragment();
if (currentFragment != null) {
ft.hide(currentFragment);
}
Fragment fragmentTemp = fm.findFragmentByTag(tagFragmentName);
if (fragmentTemp == null) {
fragmentTemp = fragment;
ft.add(R.id.content,fragmentTemp,tagFragmentName);
} else {
ft.show(fragmentTemp);
}
ft.setPrimaryNavigationFragment(fragmentTemp).commit();
}
private void showProspectFragment() {
changeFragment(ProspectContainerFragment.newInstance(),ProspectContainerFragment.class.getSimpleName());
}
private void showChatsFragment() {
changeFragment(ChatsFragment.newInstance(),ChatsFragment.class.getSimpleName());
}
....
// Bottom nav item click listener
binding.bottomNav.setonNavigationItemSelectedListener(item -> {
switch (item.getItemId()) {
case R.id.prospect:
showProspectFragment();
return true;
case R.id.chat:
showChatsFragment();
break;
...
}
});
但是,每当重新创建活动(使用recreate())时,由于某些原因,无论我点击底部导航键多少次,片段都不可见。
解决方法
您是否正在使用显示/隐藏功能?如果是这样的话,
我认为您必须在类onCreate
方法中调用一个函数。