Андроид, сколько осталось фрагментов

Мне нужно добавить в мое приложение возможность показывать сообщение, когда пользователь покидает приложение (т.е. вы хотите выйти? Да-нет)

Я использую фрагменты, поэтому я не знаю, кто из них показывает сообщение на "onBackPressed" последним, так есть ли способ узнать, сколько фрагментов осталось, или я что-то упустил?

2 ответа

Решение

getSupportFragmentManager()getBackStackEntryCount() было то, что мне было нужно

@Override
public void onBackPressed() {

    if(getSupportFragmentManager().getBackStackEntryCount() == 0){
        DialogInterface.OnClickListener dialogClickListener = new DialogInterface.OnClickListener() {
            @Override
            public void onClick(DialogInterface dialog, int which) {
                switch (which){
                case DialogInterface.BUTTON_POSITIVE:
                    MainActivity.this.finish();
                    break;

                case DialogInterface.BUTTON_NEGATIVE:
                    break;
                }
            }
        };

        AlertDialog.Builder builder = new AlertDialog.Builder(this);
        builder.setMessage(getString(R.string.leave_app)).setPositiveButton("Yes", dialogClickListener)
            .setNegativeButton("No", dialogClickListener).show();
    } else {
        super.onBackPressed();
    }


}

Если вы используете ViewPager Вы можете получить номер текущего фрагмента, используя getCurrentItem() method из ViewPager,

Затем реализовать onBackPressed метод ActivityКроме того, он будет вызываться независимо от того, на каком фрагменте находится пользователь, однако вы можете сравнить номер currentFragment с totalNumber фрагментов и показать сообщение.

private boolean exit = false;
    @Override
        public void onBackPressed() {
                    // implement a logic on backPressed, I have added a logic
                    // it show a toast, if the user presses back again within
                    // three seconds, the activity closes.

                    if (exit)
                Home.this.finish();
            else {
                Toast.makeText(this, "Press Back again to Exit.",
                        Toast.LENGTH_SHORT).show();
                exit = true;
                new Handler().postDelayed(new Runnable() {
                    @Override
                    public void run() {
                        exit = false;
                    }
                }, 3 * 1000);

            } 

        }
Другие вопросы по тегам