使用Android

时间:2016-06-15 09:20:54

标签: android android-fragments onbackpressed

我的目标是以下行为。

当我参加我的主要活动时, 如果我导航到片段1, 从那里,导航到片段2, 然后当我按下手机的后退按钮时, 因为我在片段2上,所以我返回到主屏幕,而不是片段1.

如果我在页面上有一个单独的按钮,这种行为将非常简单,就像我可以做的那样:

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

我遇到了困难,因为我需要使用手机自带的后退按钮。我已经读过OnButtonPressed()事件只能由一个活动而不是一个片段使用,并且将这种逻辑移动到活动中证明是困难的!

如何实现我之后的行为?

2 个答案:

答案 0 :(得分:1)

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

请使用以下代码:

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

您可以在以下网址找到更多详情:

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

答案 1 :(得分:1)

只需跟踪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();
        }
    }

希望它会有所帮助:)