双击退出片段

问题描述 投票:1回答:3

由于问题非常相似,但我没有找到确切答案。我在下面的链接上尝试了答案,但它无法正常工作!

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中的底部导航栏)双击以退出应用程序。

java android android-fragments
3个回答
1
投票

试试这个代码,它总是有效。

在顶部添加这个

 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);
        }
    }
  }    

1
投票
 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);
}

0
投票

你不需要一个处理程序:

@Override
public void onBackPressed() { 
    long currentMillis = System.currentTimeMillis();
    if (currentMillis - this.lastPressed < 2000 && getFragmentManager().getBackStackEntryCount() > 0) {
         getFragmentManager().popBackStack();
    }
    this.lastPressed = currentMillis;
}
© www.soinside.com 2019 - 2024. All rights reserved.