У меня есть меню, в котором пользователь может нажимать на разные кнопки и переключаться между разными нижними панелями.
Когда пользователь нажимает кнопку1, происходит следующее:
setFragment(R.id.bottom_bar_container, new FooBottomBar());
Когда он нажимает кнопку2, это вызовет:
setFragment(R.id.bottom_bar_container, new BarBottomBar());
Вот метод setFragment:
private void setFragment(int layout, Fragment newFragment) {
String tag = newFragment.getClass().getCanonicalName();
Fragment fragment = getFragmentManager().findFragmentByTag(tag);
if (fragment == null) {
fragment = newFragment;
}
Log.d("Tag", "Replacing with " + tag);
getFragmentManager()
.beginTransaction()
.replace(layout, fragment, tag)
.commit();
}
В целом это работает хорошо, но если пользовательский спам нажимает обе кнопки, может произойти что-то интересное.
Logcat :
Tag: Replacing with com.example.FooBottomBar
Tag: Replacing with com.example.BarBottomBar
Но в пользовательском интерфейсе я вижу FooBottomBar
, хотя последняя замена была BarBottomBar
.
Я обнаружил, что если я добавлю addToBackStack(null)
, проблема исчезнет, но Я не хочу иметь это на заднем стеке.
getFragmentManager()
.beginTransaction()
.replace(layout, fragment, tag)
.addToBackStack(null)
.commit();
Я хотел бы знать причину этой проблемы и есть ли какое-либо решение этой проблемы.