使用 Android 片段中的后退按钮

Using the back button from a fragment in Android

我的目标是以下行为。

当我在主界面时 activity, 如果我导航到片段 1, 然后从那里导航到片段 2, 然后当我点击 phone 的后退按钮时, 因为我在片段 2 上,所以我返回到主屏幕,而不是片段 1。

如果我在页面上有一个单独的按钮,这种行为会很容易,因为我可以这样做:

Button.setOnClickListener(new OnClickListener() 
{
    @Override
    public void onClick(View v) 
    {
        FragmentManager fm = getFragmentManager();
        fm.popBackStack(null, FragmentManager.POP_BACK_STACK_INCLUSIVE);
    }
});

我 运行 遇到了困难,因为我需要使用 phone 自己的后退按钮。我读到 OnButtonPressed() 事件只能由 activity 使用,而不是片段,并且将这种逻辑移动到 activity 中被证明是困难的!

我怎样才能实现我想要的行为?

添加片段时,您需要将事务添加到后台堆栈。这意味着您希望在按下后退按钮时撤销此交易。

请使用以下代码:

getSupportFragmentManager().beginTransaction()
                           .add(detailFragment, "detail")
                           // Add this transaction to the back stack
                           .addToBackStack()
                           .commit();

您可以在 :

中找到更多详细信息

https://developer.android.com/training/implementing-navigation/temporal.html

只需跟踪 backstackcount,你就可以根据计数做任何你想做的事:

    @Override
    public void onBackPressed() {
        manageBackStack();
    }

    private void manageBackStack() {
        switch (getSupportFragmentManager().getBackStackEntryCount()) {
            case 1:
                //Do when count is 1
                break;
            case 2:
                //Do when count is 2
                break;
            default:
                finish();
        }
    }

希望对您有所帮助:)