onBackPress在IF ELSE语句不能正常工作
我有一个小问题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();
}
}
使用适当的括号,而使用条件像
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删除片段,修改你的第三个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();
}
}
onBackPressed()应用程序现在关闭。但我的片段不会消失并返回我的webview。它只是关闭应用程序。那第三条If语句有问题。 –
@FrancesOkolo我认为你需要检查webview片段是否处于活动状态,然后才调用'goBack'。可以通过检查后台堆栈顶部的片段名称进行检查 – Shaishav
在最后else块试试这个,
super.onBackPressed();
finish();
我有一种强烈的感觉,第三如果应该是'else if(count!= 0)' – Shaishav
@Shaishav我分享那种强烈的感觉。移动到答案,所以你可以得到正确的奖励,如果是这样,我想是的。 – Vucko
同样在这里,但我认为如果@Frances需要,代码也需要一些改进。似乎弹出返回堆栈调用,但同时用home替换当前片段。这似乎是一些智能逻辑或错误。 – Ramit