为什么FragmentManager不会删除片段

时间:2016-01-14 09:24:40

标签: android android-fragments

我正在使用此代码向我的布局添加Fragment

getSupportFragmentManager().beginTransaction()
    .replace(R.id.frameLayout, newFragment, newFragment.getClass().getName())
    .setTransition(FragmentTransaction.TRANSIT_FRAGMENT_OPEN)
    .commit();

newFragment是我要展示的新Fragment

我用来删除FragmentManager中的片段的下一个代码:

Fragment fragment = getSupportFragmentManager().findFragmentByTag(newFragment.getClass().getName());

if(fragment != null) {
    getSupportFragmentManager()
        .beginTransaction()
        .remove(fragment)
        .commit();
}

但它不起作用!如果我想从FragmentManager获取与findFragmentByTag相同的片段,则返回它。

我的问题是如何从Fragment删除FragmentManager

1 个答案:

答案 0 :(得分:0)

  1. 确保使用import android.support.v4.app.Fragment;import android.support.v4.app.FragmentTransaction;

    • 如果导入不正确,则没有错误,但在删除时会返回NULL片段,因此不会删除它。
  2. 我在MainActivity中的Frame上添加了FirstFragment,与你的方式相同。

    getSupportFragmentManager().beginTransaction()
            .replace(R.id.myFrame, firstFrag, firstFrag.getClass().getName())
            .setTransition(FragmentTransaction.TRANSIT_FRAGMENT_OPEN)
            .commit();
    
  3. 并在Backpress上我使用下面的代码删除该片段 -

    @Override
    public void onBackPressed(){
    
        Fragment fragment = getSupportFragmentManager()
                          .findFragmentByTag(firstFrag.getClass().getName());
    
        if(fragment != null) {
            getSupportFragmentManager()
                .beginTransaction()
                .remove(fragment)
                .commit();
        }
    
    }