2015-04-23 120 views
-1

我有一个有三个片段的活动。我还重写了我的活动onBackPressed()方法。当用户导航到我的任何片段时,会出现后退按钮的标准行为。除了当我发射一个不是来自其“父母”的片段时。Activity.finish()没有完成活动

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

下面是检查是什么所示的电流片段并决定做什么相应

@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

您是否尝试删除'super.onBackPressed();'? –

+0

刚刚尝试过。当我必须完成()应用程序时,我仍然被扔进fragment3。 –

+0

你能看到logcat中的“EXITING APP”吗? –

回答

0

问题似乎是super.onBackPressed()我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(); 
     }