第二次Android无法找到标签片段

时间:2016-06-16 16:23:07

标签: android transactions tags fragment

我有setRetainInstance(true)的片段,并在首次启动后尝试查找我的片段。

    private void showHomeFragment() {
    mHomeFragment = (HomeFragment) getSupportFragmentManager().findFragmentByTag(HomeFragment.class.getSimpleName());

    if (mHomeFragment == null) {
        mHomeFragment = new HomeFragment();
    }

    showFragment(mHomeFragment, false);
}

@Override
public void showFragment(Fragment fragment, boolean addToBackStack) {

    @SuppressLint("CommitTransaction") FragmentTransaction transaction = getSupportFragmentManager()
            .beginTransaction()
            .replace(R.id.main_container,
                    fragment,
                    fragment.getClass().getSimpleName());

    if (addToBackStack) {
        transaction.addToBackStack(fragment.getClass().getSimpleName());
    }

    transaction.commit();

    getSupportFragmentManager().executePendingTransactions();
}

我启动这个HomeFragment而不是转到另一个片段,而不是回到HomeFragment,我无法通过标签找到它。有人可以帮我弄清问题是什么吗?

提前致谢!

1 个答案:

答案 0 :(得分:1)

您正在将addToBackStack参数设置为false,而不是将替换操作放在后端堆栈上。因此,FragmentManager可能会释放对片段的引用,因为它不必撤消该事务,因此没有理由不再保留片段。我必须尝试一下才能确定,但​​我非常确信这是发生了什么。

为了清楚起见,setRetainInstance(true)与此逻辑无关。这样做是为了防止碎片被破坏然后在配置更改时重新创建。一旦你替换了HomeFragment并且它不在后面的堆栈上,那么让FragmentManager保留该片段是没有意义的。