Android 如何在手动按下后退按钮时返回到上一个片段

Android 如何在手动按下后退按钮时返回到上一个片段,android,android-fragments,back-stack,Android,Android Fragments,Back Stack,我的应用程序中有一个活动和多个片段。我想在按下后退按钮时一个一个地后退,所有的片段都是这样 我使用了这个代码段,但当按下“后退”按钮时,它会进入主活动,而不会逐个返回。此外,我还想在涉及到主活动时更改图标。(msg_alert) 我在代码中看到,您只是在替换内容框架。因此,结果是在活动开始时反压。 另外,请确保活动中有手动后退按钮 这是活动的测试xml <?xml version="1.0" encoding="utf-8"?> 有关片段backstack的更多信息,请参阅and

我的应用程序中有一个活动和多个片段。我想在按下后退按钮时一个一个地后退,所有的片段都是这样

我使用了这个代码段,但当按下“后退”按钮时,它会进入主活动,而不会逐个返回。此外,我还想在涉及到主活动时更改图标。(msg_alert)


我在代码中看到,您只是在替换内容框架。因此,结果是在活动开始时反压。
另外,请确保活动中有手动后退按钮
这是活动的测试xml

<?xml version="1.0" encoding="utf-8"?>


有关片段backstack的更多信息,请参阅android开发者参考资料:-

这是另一个选项

在活动中

Fragment secondfragment= new SecondFragmnet();

 @Override
public void onBackPressed() {

     if(secondfragment.isVisible()){
    // replace 1st fragment
      }else{
         // Alert dialog for Exit App
     }
// you can check multiple fragments.

希望它对您有所帮助

在执行片段之间的事务时,您必须使用
addToBackStack()
方法

请阅读以下内容:

使用片段事务时请使用以下代码

String backStateName = fragment.getClass().getName(); // getting Fragment Name..
FragmentManager fragmentManager = getFragmentManager();
    fragmentManager.beginTransaction().replace(R.id.content_frame, fragment)
    .addToBackStack(backStateName) //adding it to BackStack..
    .commit();

在片段中,我们没有反向导航


我们可以通过replace()方法实现这一点。

假设您有两个片段A和B。片段A在活动启动时被附加,在任何用户事件中,您都可以通过替换片段A导航到片段B

1) 将片段B添加到活动中时

// Works with either the framework FragmentManager or the
// support package FragmentManager (getSupportFragmentManager).
getSupportFragmentManager().beginTransaction()
                           .replace(R.id.container, fragmentB, "detail")
                           // Add this transaction to the back stack
                           .addToBackStack()
                           .commit();
2) 覆盖活动的onBackPressed以处理back按钮按下事件

@override
public void onBackPressed() {
     // is there any fragment in backstack, if yes popout.
    if (getSupportFragmentManager().getBackStackEntryCount() > 0) {
        getSupportFragmentManager().popBackStack();
        return;
    }
    super.onBackPressed();
}

请检查此参考中的BaseContainerFragment.java类。。你应该看看我读了这些文章,但我还是不知道怎么做。我在这个应用程序中有很多片段。如何传递片段,因为显示片段下划线的错误在选择fragment..时编写此代码意味着在活动中处理片段的事务。@user3800832在fragmentTransaction中调用addToBackStack()的次数相同,它将推动更换后的碎片进行后撤。调用getSupportFragmentManager().popBackStack()将弹出backstack中的顶部片段。您可以在路径:\samples\apidmos\src\com\example\android\API\app\FragmentStack.java的API演示中找到示例代码
String backStateName = fragment.getClass().getName(); // getting Fragment Name..
FragmentManager fragmentManager = getFragmentManager();
    fragmentManager.beginTransaction().replace(R.id.content_frame, fragment)
    .addToBackStack(backStateName) //adding it to BackStack..
    .commit();
// Works with either the framework FragmentManager or the
// support package FragmentManager (getSupportFragmentManager).
getSupportFragmentManager().beginTransaction()
                           .replace(R.id.container, fragmentB, "detail")
                           // Add this transaction to the back stack
                           .addToBackStack()
                           .commit();
@override
public void onBackPressed() {
     // is there any fragment in backstack, if yes popout.
    if (getSupportFragmentManager().getBackStackEntryCount() > 0) {
        getSupportFragmentManager().popBackStack();
        return;
    }
    super.onBackPressed();
}