2016-08-19 82 views
0

我有一個小問題public void onBackPressed()。除了最終的ELSE外,IF ELSE語句中的所有內容都能正常工作。最後的ELSE語句假設爲關閉應用程序但它沒有。這裏有人能幫我解決這個問題嗎?onBackPress在IF ELSE語句不能正常工作

@Override 
public void onBackPressed() { 

    int count = getFragmentManager().getBackStackEntryCount(); 

    DrawerLayout drawer = (DrawerLayout) findViewById(R.id.drawer_layout); 
    if (drawer.isDrawerOpen(GravityCompat.START)) { 
     drawer.closeDrawer(GravityCompat.START); 

    } else if (mWebView.canGoBack()) { 
     //returns previous webpage 
     mWebView.goBack(); 

    }else if (count == 0) { 
     //closes Fragment 
     getFragmentManager().popBackStack(); 
     HomeFragment homefragment = new HomeFragment(); 
     FragmentManager manager =getSupportFragmentManager(); 
     manager.beginTransaction().replace(
       R.id.relativelayout_for_fragment, 
       homefragment, 
       homefragment.getTag()).commit(); 
    } else { 
     //Close app (Not working!!) 
     super.onBackPressed(); 
    } 
} 
+2

我有一種強烈的感覺,第三如果應該是'else if(count!= 0)' – Shaishav

+1

@Shaishav我分享那種強烈的感覺。移動到答案,所以你可以得到正確的獎勵,如果是這樣,我想是的。 – Vucko

+0

同樣在這裏,但我認爲如果@Frances需要,代碼也需要一些改進。似乎彈出返回堆棧調用,但同時用home替換當前片段。這似乎是一些智能邏輯或錯誤。 – Ramit

回答

0

使用適當的括號,而使用條件像

if(condition){ 

    } else { 
    if(condition){ 

     } else { 

    } 
} 

不會混淆你。

@Override 
    public void onBackPressed() { 

     int count = getFragmentManager().getBackStackEntryCount(); 

     DrawerLayout drawer = (DrawerLayout) findViewById(R.id.drawer_layout); 
     if (drawer.isDrawerOpen(GravityCompat.START)) { 
      drawer.closeDrawer(GravityCompat.START); 
     } else { 
      if (mWebView.canGoBack()) { 
       //returns previous webpage 
       mWebView.goBack(); 

      } else { 
       if (count == 0) { 
        //closes Fragment 
        getFragmentManager().popBackStack(); 
        HomeFragment homefragment = new HomeFragment(); 
        FragmentManager manager = getSupportFragmentManager(); 
        manager.beginTransaction().replace(
          R.id.relativelayout_for_fragment, 
          homefragment, 
          homefragment.getTag()).commit(); 
       } else { 
        //Close app (Not working!!) 
        super.onBackPressed(); 
       } 
      } 
     } 
    } 
+0

謝謝。但仍然沒有關閉應用程序 –

0

,因爲你需要從堆棧中只有當計數大於0刪除片段,修改你的第三個if-else語句,以反映:

@Override 
public void onBackPressed() { 

    int count = getFragmentManager().getBackStackEntryCount(); 

    DrawerLayout drawer = (DrawerLayout) findViewById(R.id.drawer_layout); 
    if (drawer.isDrawerOpen(GravityCompat.START)) { 
     drawer.closeDrawer(GravityCompat.START); 

    } else if (mWebView.canGoBack()) { 
     //returns previous webpage 
     mWebView.goBack(); 

    }else if (count != 0) { // change here 
     //closes Fragment 
     getFragmentManager().popBackStack(); 
     HomeFragment homefragment = new HomeFragment(); 
     FragmentManager manager =getSupportFragmentManager(); 
     manager.beginTransaction().replace( 
       R.id.relativelayout_for_fragment, 
       homefragment, 
       homefragment.getTag()).commit(); 
    } else { 
     // probably working now 
     super.onBackPressed(); 
    } 
} 
+0

onBackPressed()應用程序現在關閉。但我的片段不會消失並返回我的webview。它只是關閉應用程序。那第三條If語句有問題。 –

+0

@FrancesOkolo我認爲你需要檢查webview片段是否處於活動狀態,然後才調用'goBack'。可以通過檢查後臺堆棧頂部的片段名稱進行檢查 – Shaishav

0

在最後else塊試試這個,

super.onBackPressed();
finish();