Фрагмент все еще существует после удаления в SDK <24 - PullRequest
1 голос
/ 12 мая 2019

У меня проблема с удалением Fragment в SDK <24. </p>

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 ???

Кроме того, этопроблема возникла только в SDK <24 (Android 5,6). <br>В чем разница между Android SDK <24 и 24 и выше? <br>Я также пытаюсь вызвать commitNow() для синхронного выполнения, но это та же проблема.

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

У кого-нибудь здесь есть такая же проблема?

Обновление:
Я также проверяю фрагмент hashcode, который я получаю перед добавлением и перед удалением.Это то же самое, поэтому я могу подтвердить, что он существует ...

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

Обновить код
Позвонив по следующему номеру:

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

Код:

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) {}
    }
}
...