gpt4 book ai didi

Android Double Back Press关闭有 fragment 的应用

转载 作者:塔克拉玛干 更新时间:2023-11-02 21:48:29 24 4
gpt4 key购买 nike

我关注了this tutorial以及关于 SO 的某些类似答案。

我现在的onBackPressed代码如下-

private static final int TIME_DELAY = 2000;
private static long back_pressed;

@Override
public void onBackPressed() {
DrawerLayout drawer = (DrawerLayout) findViewById(R.id.drawer_layout);
if (drawer.isDrawerOpen(GravityCompat.START)) {
drawer.closeDrawer(GravityCompat.START);
} else {
int fragments = getFragmentManager().getBackStackEntryCount();
if (fragments > 0) {
super.onBackPressed();
} else {
if (back_pressed + TIME_DELAY > System.currentTimeMillis()) {
super.onBackPressed();
} else {
Toast.makeText(getBaseContext(), "Press once again to exit!",
Toast.LENGTH_SHORT).show();
}
back_pressed = System.currentTimeMillis();
}
}
}

我正在像这样将 fragment 添加到返回堆栈(在某些地方我不添加到返回堆栈)-

private void LoadSignDetailsFragment() {
Bundle args = new Bundle();
Fragment fragment = new SignDetailsFragment();
args.putBoolean("hasValues", true);
args.putBoolean("showBookmarkedSignsOnly", showBookmarkedSignsOnly);
args.putInt("sign_id", signId);
if (fragment != null) {
FragmentManager fragmentManager = getActivity().getSupportFragmentManager();
fragment.setArguments(args);
FragmentTransaction fragmentTransaction = fragmentManager.beginTransaction();
fragmentTransaction.setCustomAnimations(R.anim.enter, R.anim.exit, R.anim.pop_enter, R.anim.pop_exit);
fragmentTransaction.replace(R.id.container_body, fragment);
fragmentTransaction.addToBackStack(null);
fragmentTransaction.commit();
}
}

我想做的是,如果后台堆栈中有任何 fragment ,单个 onBackPressed 会迁移到前一个 fragment 。但是,如果 backstack 中没有 Fragment,它应该显示 Toast 以双击后退以关闭应用程序。

我现在的代码,总是显示 toast ,并要求双回按,而不管后台是否存在 fragment 。我无法弄清楚为什么?

最佳答案

您可以根据需要引用以下代码。如果您不使用 v4 支持 fragment ,则必须使用 getFragmentManager() 而不是 getSupportFragmentManager() 来获取后台堆栈计数。这里我用boolean值来检测back是否被点击,如果2秒内没有再次点击,它会再次变为false。

boolean doubleBackToExitPressedOnce = false;
@Override
public void onBackPressed() {
//Checking for fragment count on backstack
if (getSupportFragmentManager().getBackStackEntryCount() > 0) {
getSupportFragmentManager().popBackStack();
} else if (!doubleBackToExitPressedOnce) {
this.doubleBackToExitPressedOnce = true;
Toast.makeText(this,"Please click BACK again to exit.", Toast.LENGTH_SHORT).show();

new Handler().postDelayed(new Runnable() {

@Override
public void run() {
doubleBackToExitPressedOnce = false;
}
}, 2000);
} else {
super.onBackPressed();
return;
}
}

关于Android Double Back Press关闭有 fragment 的应用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33910437/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com