在Android上片段化后台管理

时间:2015-04-12 02:51:55

标签: android android-fragments

我有几个片段。他们使用滑入式动画进行过渡。 MainFragment-> Fragment2 - > Fragment3。

1)我想在用户到达MainFragment时清除backstack,只将该片段留在堆栈中。

2)在某些情况下,我想删除堆栈中的上一个项目。当用户按下后退按钮并从fragment3 =>移动时说fragment2。

我在下面显示了我的代码。如果我使用该方法,片段转换动画会搞砸。我不确定如何实施第二项要求。

另一个问题是,当我从后台堆叠中移除碎片时,它们会被处理掉吗?

private void replace(Fragment fragment )    
{
if(fragment == null) return;

            FragmentTransaction fragmentTransaction = fragmentManager
                    .beginTransaction();
            fragmentTransaction.setCustomAnimations(R.anim.fragment_enter,
                    R.anim.fragment_exit);

            fragmentTransaction.replace(R.id.fragment, fragment);
            fragmentTransaction.addToBackStack(fragment.toString());

            fragmentTransaction.commit();


            if(fragment instanceof MainFragment)
                clearBackStack();
}

public void clearBackStack() {

        if (fragmentManager.getBackStackEntryCount() > 0) {
            FragmentManager.BackStackEntry first = fragmentManager.getBackStackEntryAt(0);
            fragmentManager.popBackStack(first.getId(), FragmentManager.POP_BACK_STACK_INCLUSIVE);
        }
    }

1 个答案:

答案 0 :(得分:0)

也许我误会,比你想象的更简单。我在这里调用add的{​​{1}}方法。来自Google示例代码@ Fragments并使用您的代码作为示例:

FragmentTransaction

注意: add 方法不会替换/删除片段2作为前一个片段。使用或添加 fragment2 后,使用 fragment3 调用FragmentTransaction transaction = getFragmentManager().beginTransaction(); // and add the transaction to the back stack transaction.add(R.id.fragment, fragment3); transaction.addToBackStack(fragment3.toString()); // Commit the transaction transaction.commit(); 。因此,当显示fragment3时,后退键将显示fragment2。