我正在使用一个包含一个片段的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。