从其他片段回到之前的片段

时间:2015-07-17 09:52:45

标签: java android android-fragments android-activity

我有主要活动和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();它什么都不是。

5 个答案:

答案 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();
    }

希望得到这个帮助。