我的活动有三个片段。我还在我的活动上覆盖了onBackPressed()
方法。当用户导航到我的任何片段时,会发生后退按钮的标准行为。除了当我发起一个片段而不是它的“父母”。
想象一下:我的活动没有用户界面。它只有5个片段。当用户在fragment1
,fragment2
或fragment3
上并按下后退按钮时,他必须离开应用程序(即通过仅在应用程序的活动中调用finish()) 。 Fragment1Child
概念上是fragment1
的“孩子”,fragment2Child
是fragment2
的“孩子”。当从fragment1
或fragment2
转到他们的孩子并按下后,我得到了预期的行为。但是,我会从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();
}
}
答案 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();
}