由于问题非常相似,但我没有找到确切答案。我在下面的链接上尝试了答案,但它无法正常工作!
Android Double Back Press to close the app having fragments
这是我的代码:
public interface OnBackPressedListener {
void onBackPressed();
}
现在片段:
public class HomeFragment extends Fragment implements View.OnClickListener, OnBackPressedListener{
boolean doubleBackToExitPressedOnce = false;
@Override
public void onBackPressed() {
//Checking for fragment count on backstack
if (getFragmentManager().getBackStackEntryCount() > 0) {
getFragmentManager().popBackStack();
} else if (!doubleBackToExitPressedOnce) {
this.doubleBackToExitPressedOnce = true;
Toast.makeText(getActivity(),"Tap again to exit.", Toast.LENGTH_SHORT).show();
new Handler().postDelayed(new Runnable() {
@Override
public void run() {
doubleBackToExitPressedOnce = false;
}
}, 2000);
}
}
尝试使用getSupportFragmentManager(),但它突出显示为红色。我需要从片段(android中的底部导航栏)双击以退出应用程序。
试试这个代码,它总是有效。
在顶部添加这个
private boolean isFirstBackPressed = false;
现在在onBackPressed
方法里面添加下面的代码。
添加这个:
@Override
public void onBackPressed() {
if (getSupportFragmentManager().getBackStackEntryCount() != 0){
super.onBackPressed();
}else{
if (isFirstBackPressed) {
super.onBackPressed();
} else {
isFirstBackPressed = true;
showMessage("Press back again to exit");
new Handler().postDelayed(new Runnable() {
@Override
public void run() {
isFirstBackPressed = false;
}
}, 1500);
}
}
}
private boolean isBackPressedToExit;
private void onBackPressed() {
if (isBackPressedToExit) {
finish();
return;
}
isBackPressedToExit = true;
Utility.toast(TabActivity.this, getString(R.string.msg_press_again_to_exit));
new Handler().postDelayed(new Runnable() {
@Override
public void run() {
isBackPressedToExit = false;
}
}, 2000);
}
你不需要一个处理程序:
@Override
public void onBackPressed() {
long currentMillis = System.currentTimeMillis();
if (currentMillis - this.lastPressed < 2000 && getFragmentManager().getBackStackEntryCount() > 0) {
getFragmentManager().popBackStack();
}
this.lastPressed = currentMillis;
}