遇到狀況

java.lang.IllegalStateException: Fragment already added

原因

Fragment 在一些狀況不會正常移除

原本程式碼

1
2
3
4
FragmentTransaction transaction = getFragmentManager().beginTransaction();
transaction.replace(R.id.fragment_container, newFragment);
transaction.addToBackStack(null);
transaction.commit();

解決辦法

因為replace有時會出現問題,因此在使用之前先確認Fragment是否被Added。

1
2
3
4
if(mFragment.isAdded())
{
     return; //or return false/true, based on where you are calling from
}

後來程式碼

1
2
3
4
5
6
7
FragmentTransaction transaction = getFragmentManager().beginTransaction();
if (newFragment.isAdded()) {
    return;
}
transaction.replace(R.id.fragment_container, newFragment);
transaction.addToBackStack(null);
transaction.commit();