我对 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();
}
}
答案 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();
完();