Андроид, сколько осталось фрагментов
Мне нужно добавить в мое приложение возможность показывать сообщение, когда пользователь покидает приложение (т.е. вы хотите выйти? Да-нет)
Я использую фрагменты, поэтому я не знаю, кто из них показывает сообщение на "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);
}
}