Android 双击底部导航菜单项退出应用程序
每个帖子都是导航抽屉,但由于我使用的是底部导航,所以我找不到任何解决方案。搜索并尝试了所有线程Android 双击底部导航菜单项退出应用程序,android,exit,double-click,android-toast,bottomnavigationview,Android,Exit,Double Click,Android Toast,Bottomnavigationview,每个帖子都是导航抽屉,但由于我使用的是底部导航,所以我找不到任何解决方案。搜索并尝试了所有线程 //fragments remove logic int backStackEntryCount = getSupportFragmentManager().getBackStackEntryCount(); // this is last item if (backStackEntryCount == 1) { if (allo
//fragments remove logic
int backStackEntryCount = getSupportFragmentManager().getBackStackEntryCount();
// this is last item
if (backStackEntryCount == 1) {
if (allowedToExit)
finish();
else {
allowedToExit = true;
Util.showToast(BaseActivity.this,
"Press again to exit", false);
new Handler().postDelayed(new Runnable() {
@Override
public void run() {
allowedToExit = false;
}
}, 1000);
return;
}
}
// we have more than 1 fragments in back stack
if (backStackEntryCount > 1) {
Util.hideSoftKeyboard(BaseActivity.this);
onRemoveCurrentFragment();
} else
super.onBackPressed();
这是我选择菜单项的选择器方法
public boolean onNavigationItemSelected(@NonNull MenuItem item)
{
View v=null;
int id = item.getItemId();
switch (id){
case R.id.search:
fragment = new Search();
break;
case R.id.todo:
fragment = new ServiceTable();
break;
case R.id.info:
fragment = new Orderlist();
break;
case R.id.close:
//have to implement double click here.
break;
}
final FragmentTransaction transaction = fragmentManager.beginTransaction();
transaction.replace(R.id.main_container, fragment).commit();
return true;
}
});
if (savedInstanceState == null) {
bottomNavigation.setSelectedItemId(R.id.search);
}
}
//fragments remove logic
int backStackEntryCount = getSupportFragmentManager().getBackStackEntryCount();
// this is last item
if (backStackEntryCount == 1) {
if (allowedToExit)
finish();
else {
allowedToExit = true;
Util.showToast(BaseActivity.this,
"Press again to exit", false);
new Handler().postDelayed(new Runnable() {
@Override
public void run() {
allowedToExit = false;
}
}, 1000);
return;
}
}
// we have more than 1 fragments in back stack
if (backStackEntryCount > 1) {
Util.hideSoftKeyboard(BaseActivity.this);
onRemoveCurrentFragment();
} else
super.onBackPressed();
你可以写
boolean isClickedTwice = false;
public boolean onNavigationItemSelected(@NonNull MenuItem item) {
View v = null;
int id = item.getItemId();
switch (id){
case R.id.close:
//have to implement double click here.
if (isClickedTwice) {
this.finish();
}
isClickedTwice = true;
break;
}
final FragmentTransaction transaction = fragmentManager.beginTransaction();
transaction.replace(R.id.main_container, fragment).commit();
return true;
}
});
//fragments remove logic
int backStackEntryCount = getSupportFragmentManager().getBackStackEntryCount();
// this is last item
if (backStackEntryCount == 1) {
if (allowedToExit)
finish();
else {
allowedToExit = true;
Util.showToast(BaseActivity.this,
"Press again to exit", false);
new Handler().postDelayed(new Runnable() {
@Override
public void run() {
allowedToExit = false;
}
}, 1000);
return;
}
}
// we have more than 1 fragments in back stack
if (backStackEntryCount > 1) {
Util.hideSoftKeyboard(BaseActivity.this);
onRemoveCurrentFragment();
} else
super.onBackPressed();
你可以写
boolean isClickedTwice = false;
public boolean onNavigationItemSelected(@NonNull MenuItem item) {
View v = null;
int id = item.getItemId();
switch (id){
case R.id.close:
//have to implement double click here.
if (isClickedTwice) {
this.finish();
}
isClickedTwice = true;
break;
}
final FragmentTransaction transaction = fragmentManager.beginTransaction();
transaction.replace(R.id.main_container, fragment).commit();
return true;
}
});
//fragments remove logic
int backStackEntryCount = getSupportFragmentManager().getBackStackEntryCount();
// this is last item
if (backStackEntryCount == 1) {
if (allowedToExit)
finish();
else {
allowedToExit = true;
Util.showToast(BaseActivity.this,
"Press again to exit", false);
new Handler().postDelayed(new Runnable() {
@Override
public void run() {
allowedToExit = false;
}
}, 1000);
return;
}
}
// we have more than 1 fragments in back stack
if (backStackEntryCount > 1) {
Util.hideSoftKeyboard(BaseActivity.this);
onRemoveCurrentFragment();
} else
super.onBackPressed();
我看到你在用碎片。您是否为此维护任何后台堆栈跟踪?我建议你这样做,然后你实现双击退出应用程序。让我知道
//fragments remove logic
int backStackEntryCount = getSupportFragmentManager().getBackStackEntryCount();
// this is last item
if (backStackEntryCount == 1) {
if (allowedToExit)
finish();
else {
allowedToExit = true;
Util.showToast(BaseActivity.this,
"Press again to exit", false);
new Handler().postDelayed(new Runnable() {
@Override
public void run() {
allowedToExit = false;
}
}, 1000);
return;
}
}
// we have more than 1 fragments in back stack
if (backStackEntryCount > 1) {
Util.hideSoftKeyboard(BaseActivity.this);
onRemoveCurrentFragment();
} else
super.onBackPressed();
allowedToExit是一个布尔值,用于跟踪用户是否被允许退出。我们根据堆叠碎片的数量以及用户是否按了两次来判断。我在OnBackpress方法中使用了这个逻辑来创建一个两次Backpress退出应用程序
//fragments remove logic
int backStackEntryCount = getSupportFragmentManager().getBackStackEntryCount();
// this is last item
if (backStackEntryCount == 1) {
if (allowedToExit)
finish();
else {
allowedToExit = true;
Util.showToast(BaseActivity.this,
"Press again to exit", false);
new Handler().postDelayed(new Runnable() {
@Override
public void run() {
allowedToExit = false;
}
}, 1000);
return;
}
}
// we have more than 1 fragments in back stack
if (backStackEntryCount > 1) {
Util.hideSoftKeyboard(BaseActivity.this);
onRemoveCurrentFragment();
} else
super.onBackPressed();
我看到你在用碎片。您是否为此维护任何后台堆栈跟踪?我建议你这样做,然后你实现双击退出应用程序。让我知道
//fragments remove logic
int backStackEntryCount = getSupportFragmentManager().getBackStackEntryCount();
// this is last item
if (backStackEntryCount == 1) {
if (allowedToExit)
finish();
else {
allowedToExit = true;
Util.showToast(BaseActivity.this,
"Press again to exit", false);
new Handler().postDelayed(new Runnable() {
@Override
public void run() {
allowedToExit = false;
}
}, 1000);
return;
}
}
// we have more than 1 fragments in back stack
if (backStackEntryCount > 1) {
Util.hideSoftKeyboard(BaseActivity.this);
onRemoveCurrentFragment();
} else
super.onBackPressed();
allowedToExit是一个布尔值,用于跟踪用户是否被允许退出。我们根据堆叠碎片的数量以及用户是否按了两次来判断。我在OnBackpress方法中使用了这个逻辑来创建一个两次Backpress退出应用程序
//fragments remove logic
int backStackEntryCount = getSupportFragmentManager().getBackStackEntryCount();
// this is last item
if (backStackEntryCount == 1) {
if (allowedToExit)
finish();
else {
allowedToExit = true;
Util.showToast(BaseActivity.this,
"Press again to exit", false);
new Handler().postDelayed(new Runnable() {
@Override
public void run() {
allowedToExit = false;
}
}, 1000);
return;
}
}
// we have more than 1 fragments in back stack
if (backStackEntryCount > 1) {
Util.hideSoftKeyboard(BaseActivity.this);
onRemoveCurrentFragment();
} else
super.onBackPressed();
您必须创建一个全局布尔变量来检查双击功能,如:
//fragments remove logic
int backStackEntryCount = getSupportFragmentManager().getBackStackEntryCount();
// this is last item
if (backStackEntryCount == 1) {
if (allowedToExit)
finish();
else {
allowedToExit = true;
Util.showToast(BaseActivity.this,
"Press again to exit", false);
new Handler().postDelayed(new Runnable() {
@Override
public void run() {
allowedToExit = false;
}
}, 1000);
return;
}
}
// we have more than 1 fragments in back stack
if (backStackEntryCount > 1) {
Util.hideSoftKeyboard(BaseActivity.this);
onRemoveCurrentFragment();
} else
super.onBackPressed();
boolean doubleBackToExitPressedOnce = false;
在此之后,在您的案例R.id.close中执行以下代码
//fragments remove logic
int backStackEntryCount = getSupportFragmentManager().getBackStackEntryCount();
// this is last item
if (backStackEntryCount == 1) {
if (allowedToExit)
finish();
else {
allowedToExit = true;
Util.showToast(BaseActivity.this,
"Press again to exit", false);
new Handler().postDelayed(new Runnable() {
@Override
public void run() {
allowedToExit = false;
}
}, 1000);
return;
}
}
// we have more than 1 fragments in back stack
if (backStackEntryCount > 1) {
Util.hideSoftKeyboard(BaseActivity.this);
onRemoveCurrentFragment();
} else
super.onBackPressed();
if (doubleBackToExitPressedOnce) {
finishAffinity();
}
this.doubleBackToExitPressedOnce = true;
Toast.makeText(this, "Press again to exit", Toast.LENGTH_SHORT).show();
new Handler().postDelayed(new Runnable() {
@Override
public void run() {
doubleBackToExitPressedOnce = false;
}
}, 2000);
您必须创建一个全局布尔变量来检查双击功能,如:
//fragments remove logic
int backStackEntryCount = getSupportFragmentManager().getBackStackEntryCount();
// this is last item
if (backStackEntryCount == 1) {
if (allowedToExit)
finish();
else {
allowedToExit = true;
Util.showToast(BaseActivity.this,
"Press again to exit", false);
new Handler().postDelayed(new Runnable() {
@Override
public void run() {
allowedToExit = false;
}
}, 1000);
return;
}
}
// we have more than 1 fragments in back stack
if (backStackEntryCount > 1) {
Util.hideSoftKeyboard(BaseActivity.this);
onRemoveCurrentFragment();
} else
super.onBackPressed();
boolean doubleBackToExitPressedOnce = false;
在此之后,在您的案例R.id.close中执行以下代码
//fragments remove logic
int backStackEntryCount = getSupportFragmentManager().getBackStackEntryCount();
// this is last item
if (backStackEntryCount == 1) {
if (allowedToExit)
finish();
else {
allowedToExit = true;
Util.showToast(BaseActivity.this,
"Press again to exit", false);
new Handler().postDelayed(new Runnable() {
@Override
public void run() {
allowedToExit = false;
}
}, 1000);
return;
}
}
// we have more than 1 fragments in back stack
if (backStackEntryCount > 1) {
Util.hideSoftKeyboard(BaseActivity.this);
onRemoveCurrentFragment();
} else
super.onBackPressed();
if (doubleBackToExitPressedOnce) {
finishAffinity();
}
this.doubleBackToExitPressedOnce = true;
Toast.makeText(this, "Press again to exit", Toast.LENGTH_SHORT).show();
new Handler().postDelayed(new Runnable() {
@Override
public void run() {
doubleBackToExitPressedOnce = false;
}
}, 2000);
对不起,我没用。我用的是碎片。不太简单对不起,我没用。我用的是碎片。不是activitypost双击实施toopost双击实施TooAnks以节省时间!!这对我来说就像一个符咒!!是否有方法在应用程序关闭后不显示toast消息?。再一次,碎片没有答案。@VishnuRoshan请检查这个感谢你拯救了这一天!!这对我来说就像一个符咒!!是否有方法在应用程序关闭后不显示toast消息?。再一次,碎片没有答案。@VishnuRoshan请检查这个