Fragment快速切换导致闪退的问题
private void showFragment(String fname, String tag) {
Fragment fragment = getSupportFragmentManager().findFragmentByTag(tag);
if (fragment == null) {
fragment = Fragment.instantiate(context, fname);
}
FragmentTransaction ft = getSupportFragmentManager().beginTransaction();
ft.setCustomAnimations(R.anim.alpha_in_short, R.anim.alpha_out_short);
List<Fragment> fragments = getSupportFragmentManager().getFragments();
Fragment old = getSupportFragmentManager().findFragmentById(R.id.main_fragment_container);
for (Fragment f : fragments) {
if (f.isVisible() && !(f instanceof BacklogFragment)
&& !(f instanceof OfficeWorkSubappFragment)) {
old = f;
break;
}
}
if (old != null) {
if (Objects.requireNonNull(old.getTag()).equals(tag)) {
return;
}
if (Objects.requireNonNull(old.getTag()).equals(CnpcOAChatListFragment.TAG) || Objects
.requireNonNull(old.getTag()).equals(OfficeWorkFragment.TAG) || Objects
.requireNonNull(old.getTag()).equals(CnpcOAWorkFragment.TAG) || Objects
.requireNonNull(old.getTag()).equals(CnpcOAWebFragment.TAG) || Objects
.requireNonNull(old.getTag()).equals(CnpcOAContactsFragment.TAG)) {
ft.hide(old);
} else {
ft.remove(old);
}
}
if (fragment.isAdded()) {
ft.show(fragment);
} else {
ft.add(R.id.main_fragment_container, fragment, tag);
}
ft.commitNow();
}