2015-04-23 93 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(); 
     }