我有主要活动和2个片段,fragment1调用fragment2 当我从内置的android按钮单击后退按钮时,它调用我在主活动中覆盖的onBackPressed函数并从应用程序中退出。 我希望当我点击片段2时,主要活动的onBackPressed将不会被调用,它将返回到片段1。 操作栏的后退按钮运行良好(我认为这意味着后台堆栈没问题)。
我试着这样做:
getActivity().getSupportFragmentManager().beginTransaction().addToBackStack("Messages");
片段2上的
并尝试添加
getSupportFragmentManager().popBackStack();
到主要活动的onBackPressed() 它什么也没做 谢谢
编辑:
I am trying to do
public void onBackPressed() {
// getSupportFragmentManager().popBackStack();
android.support.v4.app.Fragment fragment2 = getSupportFragmentManager().findFragmentByTag(null);
if (fragment2 != null && fragment2.isVisible()) {
getSupportFragmentManager().popBackStack();
return;
}
在任何节目之前
getSupportFragmentManager().beginTransaction().addToBackStack(null).commit();
tr.show(Fragment2);
但在findFragment(null)
上得到null编辑: 我检查了getSupportFragmentManager()。beginTransaction()。mTail.fragment并看到该值是我要显示的片段1,但是当我执行getSupportFragmentManager()时,popBackStack();它什么都不是。
答案 0 :(得分:0)
在主要活动中覆盖onBackPressed()。
检查当前显示的片段,如果显示片段2,则弹回堆栈。
示例:
@Override
public void onBackPressed() {
Fragment fragment2 = getFragmentManager().findFragmentByTag("tag");
if (fragment2 != null && fragment2.isVisible()) {
getFragmentManager().popBackStack();
} else {
finish();
}
}
答案 1 :(得分:0)
只需使用以下方式;在你的活动中检查这个
@Override
public void onBackPressed() {
// TODO Auto-generated method stub
Fragment fragment = getSupportFragmentManager().findFragmentByTag("SecondFragment");
if (fragment instanceof SecondFragment) {
// show first fragment
}else{
// finish();
}
}
我使用过findFragmentByTag,你也可以使用findFragmentById
我同意@Minhtdh的评论,但只有在替换其他
时才适用答案 2 :(得分:0)
在MainActivity中调用fragment2.show()之前,将fragmnet事务添加到backstack。没有必要覆盖onBackPressed()。默认情况下,android为您实现相同的功能。
答案 3 :(得分:0)
简单的工作代码。 回到第一段。
yourviewvariable.setNavigationOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
getActivity().onBackPressed();
}
});
答案 4 :(得分:0)
很抱歉我错过了打字,我的意思是onBackPressed方法
但是对于你的情况,因为你使用FragmentTransition.show(),它不会将片段添加到backstack,popBackStack将无法工作。所以我认为你应该试试这个:
1.不要拨打getSupportFragmentManager().beginTransaction().addToBackStack(null).commit();
,因为它会增加一个不必要的后台堆
2.不要将“tr”变量存储为全局变量,还需要调用commit()来结束事务:
Fragment2.setTag("fragment2");
getSupportFragmentManager().beginTransaction().show(Fragment2).commit();
3.在onBackPressed():
android.support.v4.app.Fragment fragment2 = getSupportFragmentManager().findFragmentByTag("fragment2");
if (fragment2 != null && fragment2.isVisible()) {
getSupportFragmentManager().beginTransaction().hide(fragment2).commit();
return;
} else {
super.onBackPressed();
}
希望得到这个帮助。