如果您只是想添加一个 Fragment,而不必担心重新创建它,那么我认为我编写的这个添加 Fragment 的方法会满足您的需求。
public staticvoid attachFragment ( int fragmentHolderLayoutId, Fragment fragment, Context context, String tag ) {
FragmentManager manager = ( (AppCompatActivity) context ).getSupportFragmentManager ();
manager.findFragmentByTag ( tag );
FragmentTransaction ft = manager.beginTransaction ();
if (manager.findFragmentByTag ( tag ) == null) { // No fragment in backStack with same tag..
ft.add ( fragmentHolderLayoutId, fragment, tag );
ft.addToBackStack ( tag );
ft.commit ();
}
else {
for (Fragment frag : manager.getFragments()){
ft.hide(frag)
}
ft.show ( manager.findFragmentByTag ( tag ) ).commit ();
}
}
Kotlin:
funattachFragment(fragmentHolderLayoutId: Int, fragment: Fragment?, tag: String?) {
val manager: FragmentManager = supportFragmentManager
val ft: FragmentTransaction = manager.beginTransaction()
if (manager.findFragmentByTag(tag) == null) { // No fragment in backStack with same tag..
ft.add(fragmentHolderLayoutId, fragment!!, tag)
ft.addToBackStack(tag)
ft.commit()
} else {
//Hide other fragmentsfor (frag in manager.fragments){
ft.hide(frag)
}
//Shows the selected fragment.
ft.show(manager.findFragmentByTag(tag)!!).commit()
}
}
/**
* Takes a Fragment TAG and tries to find the fragment in the manager if it exists and bring it to front.
* if not, will return false;
* @param manager
* @param tag
*/publicstaticbooleanresurfaceFragment(FragmentManager manager, String tag ){
Fragmentfragment= manager.findFragmentByTag(tag);
FragmentTransactiontransaction= manager.beginTransaction();
if (fragment!=null){
for (inti=0; i < manager.getFragments().size(); i++) {
Fragmentf= manager.getFragments().get(i);
transaction.hide(f);
}
transaction.show(fragment).commit();
returntrue;
}
returnfalse;
}