Fragment still exist after remove in SDK < 24

做~自己de王妃 提交于 2019-12-04 05:29:23

问题


I'm facing the problem about removing Fragment in SDK < 24.

removeFragment()

FragmentTransaction frgTrans = fragmentMng.beginTransaction();
MyFragment myFrg = (MyFragment) fragmentMng.findFragmentByTag(TAG_MY_FRAGMENT);
frgTrans.remove(myFrg).commit();

getFragment()

MyFragment myFrg = (MyFragment) fragmentMng.findFragmentByTag(TAG_MY_FRAGMENT);
if (myFrg == null ) {
   // Do sth
}
// But I checked that myFrg is NOT NULL ???

Furthermore, this problem only happened in SDK < 24 ( Android 5,6 ).
What's difference things between Android SDK < 24 and 24 above ?
I also try to call commitNow() for execute synchronously but it's same problem.

if (Build.VERSION.SDK_INT < Build.VERSION_CODES.N) {
    frgTrans.commit();
    fragmentMng.popBackStack();
} else {
    frgTrans.commitNow();
}

Anyone here has same problem ?

Update:
I also check Fragment hashcode I get before add and before remove. It's same so I can affirm that it's existing...

05-12 11:34:38.705 3916-3916/myapp.test E/FragmentControllerTest: hashcode before remove: 136290746  
05-12 11:34:39.856 3916-3916/myapp.test E/FragmentControllerTest: hashcode before add: 136290746

Update code
Calling follow:

GotoActivity 1: AddMyFragment()  
GotoActivity 2: (destroy Activity1 ) removeMyFragment()  
BackToActivity1: AddMyFragment() (onResume)

Code:

private void addMyFragment() {
    MyFragment myFrg = (MyFragment) mActivity.getSupportFragmentManager().findFragmentByTag(TAG_MY_FRAGMENT);
    if (myFrg == null) {
        try {
            myFrg = new MyFragment();
            FragmentTransaction frgTrans = mActivity.getSupportFragmentManager().beginTransaction();
            frgTrans.add(R.id.my_fragment, myFrg, TAG_MY_FRAGMENT);
            if (Build.VERSION.SDK_INT < Build.VERSION_CODES.N) {
                frgTrans.commit();
            } else {
                frgTrans.commitNow();
            }
        } catch (Exception e) {}
    } else {
        Log.e(TAG, "hash code after remove: " + myFrg.hashCode());
    }
}  

private void removeMyFragment() {   
    MyFragment myFrg = (MyFragment) mActivity.getSupportFragmentManager().findFragmentByTag(TAG_MY_FRAGMENT);
    if (myFrg != null) {
    Log.e(TAG, "hash code after add: " + myFrg.hashCode());
        try {
            FragmentTransaction frgTrans = mActivity.getSupportFragmentManager().beginTransaction();
            frgTrans.remove(myFrg);
            if (Build.VERSION.SDK_INT < Build.VERSION_CODES.N) {
                frgTrans.commit();
                mActivity.getSupportFragmentManager().popBackStack();
            } else {
                frgTrans.commitNow();
            }

        } catch (Exception e) {}
    }
}

来源:https://stackoverflow.com/questions/56095728/fragment-still-exist-after-remove-in-sdk-24

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!