Activity.finish()没有完成活动

时间:2015-04-23 15:23:08

标签: android android-fragments

我的活动有三个片段。我还在我的活动上覆盖了onBackPressed()方法。当用户导航到我的任何片段时,会发生后退按钮的标准行为。除了当我发起一个片段而不是它的“父母”。

想象一下:我的活动没有用户界面。它只有5个片段。当用户在fragment1fragment2fragment3上并按下后退按钮时,他必须离开应用程序(即通过仅在应用程序的活动中调用finish()) 。 Fragment1Child概念上是fragment1的“孩子”,fragment2Childfragment2的“孩子”。当从fragment1fragment2转到他们​​的孩子并按下后,我得到了预期的行为。但是,我会从fragment3转到fragment2Child,然后按回来我与fragment2一起正确显示。现在,当我按下Activity.finalize()方法时,我已执行,但应用程序已关闭。相反,我回到fragment3

这是我的onBackPressed()方法,它检查显示的当前片段是什么,并决定做什么相应的

@Override
    public void onBackPressed() {
        Log.d(TAG, "MainACtivity.onBackPressed()");
        FragmentManager manager = getSupportFragmentManager();
        FragmentTransaction transaction = manager.beginTransaction();

        if (mDrawerLayout.isDrawerOpen(GravityCompat.START)) {
            Log.d("NIBHA", " Drawere  ++++++++++++++++++++++");
            mDrawerLayout.closeDrawers();
        } else {
            Fragment fragment = getSupportFragmentManager().findFragmentById(
                    R.id.fragment_container);
            Log.d("Nibha", "" + fragment);
            if (fragment instanceof DeliveryOrder
                    || fragment instanceof IncomingShipment
                    || fragment instanceof RentalAgreement) {
                Log.d(TAG, "EXITING APP");
                finish();
                return;

            }
            if (fragment instanceof IncomingShipmentDetail
                    && getIntent().getAction().equals("RA")) {
                Log.d(TAG, "IS DETAIL CALLED FROM RA");
                transaction.replace(R.id.fragment_container,
                        new IncomingShipment());
                transaction.commit();
            }
            super.onBackPressed();
        }

    }

1 个答案:

答案 0 :(得分:0)

问题似乎是super.onBackPressed();没有被召唤。删除return语句并将以下内容更改为else if

if (fragment instanceof IncomingShipmentDetail
                && getIntent().getAction().equals("RA")) {
            Log.d(TAG, "IS DETAIL CALLED FROM RA");
            transaction.replace(R.id.fragment_container,
                    new IncomingShipment());
            transaction.commit();
        }