我使用的是一个非常简单的应用程序,有一个WebView和一个扩展的浮动动作按钮。
当用户按下后退键时,我希望在不同的时间发生3种不同的事情:
- 如果扩展FAB是可见的,隐藏它
- 如果扩展FAB不可见并且(&&)WebView不在BackForwardList的第一个索引上(意思是如果用户不在应用程序的主页上),则返回(意思是在用户到达应用程序的主页之前转到上一页)
- 如果WebView的索引小于BackForwardList的第一个索引(意思是如果用户在主页上)和(&&)FAB不可见,显示退出应用程序的消息
的
前两个功能工作正常,第三个,不工作,即,如果我点击后退按钮时,我已经在主页上和(&&) fab也关闭了,它不显示消息"你想退出吗?">
我做错了什么?
这是我的MainActivity
@Override
public void onBackPressed() {
WebView myWebView = (WebView) findViewById(R.id.webview);
if (areAllFabsVisible ) {
hideFabs();
}
if ( myWebView.copyBackForwardList().getCurrentIndex() > 0 && !areAllFabsVisible) {
myWebView.goBack();
}
else if (myWebView.copyBackForwardList().getCurrentIndex() < 0 && !areAllFabsVisible) {
AlertDialog.Builder builder = new AlertDialog.Builder(this);
builder.setCancelable(false);
builder.setMessage("Do you want to Exit?");
builder.setPositiveButton("Yes", new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
//if user pressed "yes", then he is allowed to exit from application
finish();
}
});
builder.setNegativeButton("No", new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
//if user select "No", just cancel this dialog and continue with app
dialog.cancel();
}
});
AlertDialog alert = builder.create();
alert.show();
}
}
我认为问题在这里:
else if (myWebView.copyBackForwardList().getCurrentIndex() < 0 && !areAllFabsVisible) {
BackForwardList()的索引不能是负的,所以你应该这样写:
else if (myWebView.copyBackForwardList().getCurrentIndex() == 0 && !areAllFabsVisible) {
来检查你是否在第一页。这意味着你在第0个索引,也就是你的主页。