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请检查这个