0

에 약간 문제가 있습니다. public void onBackPressed(). IF ELSE 문의 모든 것이 최종 ELSE를 제외하고는 정상적으로 작동합니다. 마지막 ELSE 명세서이라고 가정하고 앱을 닫지 만 그렇지 않습니다. 여기 누구든지 내가 이걸 고쳐 주도록 도와 줄 수 있니?IF ELSE 문에서 onBackPress가 제대로 작동하지 않습니다.

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(); 
    } 
} 
+2

만약 내가 'else if (카운트! = 0)'이어야만한다면 세 번째 느낌이 강하다. – Shaishav

+1

@Shaishav 나는 그 강한 감정을 나눈다. 대답으로 이동하면 제대로 반응을 보일 수 있습니다. – Vucko

+0

네, 그렇습니다. 그러나 @Frances가 필요하다면 코드가 개선 될 필요가 있다고 생각합니다. 불려지는 팝백 스택을 보았지만 같은 시간에 현재 조각을 집으로 대체했습니다. 이것은 현명한 논리 또는 버그 중 하나입니다. – Ramit

답변

0

를 사용하여 적절한 중괄호 동안 혼동하지 않습니다.

@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보다 더 가기 backstack 경우에만에서 조각을 제거하는 세 번째 경우-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

마지막으로 다른 블록에서 이것을 시도,

super.onBackPressed();
finish();

관련 문제