I use this code to check a fragment before showing it. What can you say about it?
int backStackEntryCount = getFragmentManager().getBackStackEntryCount();
if (backStackEntryCount > 0){
String newFragmentTag = fragment.getClass().getSimpleName()+"|"+fragment.getArguments();
String nowShowFragmentTag = getFragmentManager().findFragmentById(R.id.main_activity_fragment_container).getTag();
if (!newFragmentTag.equals(nowShowFragmentTag)) {
getFragmentManager()
.beginTransaction()
.replace(R.id.main_activity_fragment_container, fragment, fragment.getClass().getSimpleName()+"|"+fragment.getArguments())
.addToBackStack(fragment.toString())
.commit();
}
}
1 Answer 1
In this line:
.replace(R.id.main_activity_fragment_container, fragment, fragment.getClass().getSimpleName()+"|"+fragment.getArguments())
you can reuse the
newFragmentTag
variable:.replace(R.id.main_activity_fragment_container, fragment, newFragmentTag)
This way you don't have to perform the same string concatenation twice, which is sort of the purpose of variables & methods in the first place.
Try to use
getSupportFragmentManager()
if you're using AppCompatActivity.Since you're going to replace the fragment in
R.id.main_activity_fragment_container
anyways, there's no need to check the back stack. Just check if there are any fragments in the container before checking its tag.
Below is how I would rewrite the code in my style (you don't have to follow this):
FragmentManager fManager = getSupportFragmentManager();
String newFragmentTag = fragment.getClass().getSimpleName() + " | " + fragment.getArguments();
Fragment currentFragment = fManager.findFragmentById(R.id.main_activity_fragment_container);
if (currentFragment != null && currentFragment.getTag().equals(newFragmentTag)) {
Log.w(TAG, "Fragment is already displayed");
return;
}
fManager
.beginTransaction()
.replace(R.id.main_activity_fragment_container, fragment, newFragmentTag)
.addToBackStack(fragment.toString())
.commit();