2016-08-19 145 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();