IF ELSE语句中的onBackPress无法正常工作

时间:2016-08-19 11:19:33

标签: java android if-statement navigation-drawer onbackpressed

我对 public void onBackPressed()有点麻烦。除了最终的ELSE之外, IF ELSE语句中的所有内容都能正常工作。最后的 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();
    }
}

3 个答案:

答案 0 :(得分: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();
                }
            }
        }
    }

答案 1 :(得分:0)

因为,只有当count大于0时才需要从backstack中删除片段,修改你的第三个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(); 
    } 
} 

答案 2 :(得分:0)

在最后一个块中尝试这个,

super.onBackPressed();
   完();

相关问题