每个帖子都用于导航抽屉,但由于我使用底部导航,我找不到任何解决方案。 搜索并尝试了所有线程。
这是我选择菜单项的选择器方法
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);
}
}
您必须创建一个全局布尔变量来检查双击功能,例如:
boolean doubleBackToExitPressedOnce = false;
在此之后,在您的case R.id.close
中实现以下代码
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);
你可以写
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;
}
});
我看到你在使用片段。 您是否为此维护任何后退堆栈跟踪?我建议您这样做,然后您实现双击以退出应用程序。 让我知道
allowToExit 是一个布尔值,用于跟踪用户是否被允许退出。 我们根据堆叠片段的数量和用户是否按下两次来判断。 我在我的 onBackPressed 方法中使用此逻辑来创建两次按 Back Exit 应用程序
//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();