替换片段仍然抓住了回来

时间:2013-10-16 10:07:39

标签: android replace android-fragments transactions back-button

我正在使用一个包含一个片段的Activity。我使用support.v4。 Activity和Fragment的“onBackPressed”被覆盖,所以我不能使用原始的后退按钮,我必须自己覆盖它。

所以我在片段A中,我转到片段B.片段B显示结果列表,当我选择一行时,它会转到片段C. 当我在C上并按下后退按钮时,我想返回B并显示结果。如果我再按一下按钮,我会去A. 看起来很简单。

我管理从C到B的回归。事情就是当我点击B上的后退按钮时,它会将片段C调回来。

A - > B - > C - > B(显示B但BackButton不再起作用)。

一些代码: backPressed in Fragment C

public void backPressed() {

FragmentTransaction transaction = ((FragmentActivity)m_context).getSupportFragmentManager().beginTransaction();
transaction.replace(R.id.mainactivity_fragmentcontainer,((FragmentActivity)m_context).getSupportFragmentManager().findFragmentByTag("customtag"), "customtag");
transaction.commitAllowingStateLoss();

}

片段B的标签为“customtag”。

当我用C代替B时:

FragmentC newFrag = new FragmentC(m_context);FragmentTransaction transac = ((FragmentActivity)m_context).getSupportFragmentManager().beginTransaction();
((FragmentContainerActivity)m_context).setCurrentFragment(newFrag);
transac.replace(R.id.mainactivity_fragmentcontainer, newFrag);
transac.addToBackStack(null);
transac.commitAllowingStateLoss();

任何想法为什么替换了fragmentC(显示更改并且我可以看到片段B)仍然得到后退按钮操作?

感谢您的帮助。

修改 片段B中的backPressed代码(但是,当它来自片段C时,应用程序永远不会出现。)

@Override
public void backPressed() {
    Log.e("FragmentB", "backPressed");
    //I have 2 views in FragB. If View2 is visible, I make it gone and display View1
    if(mainView.findViewById(R.id.view2).getVisibility()==View.VISIBLE){
        displayView1();
    }else{
        if(fromFragmentX){
            FragmentX fragX = new FragmentX(ctx);
            FragmentTransaction transac = ((FragmentActivity)ctx).getSupportFragmentManager().beginTransaction();
            ((FragmentContainerActivity)ctx).setCurrentFragment(fragX);
            transac.replace(R.id.mainactivity_fragmentcontainer, fragX);
            transac.commitAllowingStateLoss();
        }else{
            super.backPressed();
        }
    }
}

第二次编辑

我意识到我忘记了精确的东西。 当我用片段C替换片段B时,我是在片段B中的ListView的ArrayAdapter中进行的,但它不应该改变任何东西。

无论如何,我在应用程序的其他地方尝试了不同的东西。 在FragmentU中,我用Fragment C替换FragmentU(总是一样),我在Fragment C中设置一个属性:

private CustomFragment fragmentFrom;

所以在后面的FragmentC中,如果我来自片段U,我打电话给:

FragmentTransaction transaction = ((FragmentActivity)ctx).getSupportFragmentManager().beginTransaction();
transaction.replace(R.id.mainactivity_fragmentcontainer, fragmentFrom);
transaction.commitAllowingStateLoss();

我仍然遇到同样的问题。当从片段C返回时,片段U显示,并且运行良好,但后退按钮调用FragmentC.backPressed。

0 个答案:

没有答案