В моем приложении одна главная активность, и я добавляю в стек фрагменты при переходе (в последующих фрагментах схема такая же):
NewFragment fragment = new NewFragment();
FragmentManager fragmentManager = getFragmentManager();
fragmentManager.beginTransaction().replace(R.id.fragment_container, fragment)
.addToBackStack("").commit();
Обработка нажатия:
@Override
public void onClick(View view) {
LeagueStandingFragment lsf = new LeagueStandingFragment();
Bundle bundle = new Bundle();
bundle.putInt("id", mLeague.getId());
bundle.putString("leagueCaption", mLeague.getCaption());
lsf.setArguments(bundle);
FragmentManager fragmentManager = getFragmentManager();
fragmentManager.beginTransaction().replace(R.id.fragment_container, lsf)
.addToBackStack("").commit();
}
С обратной навигацией проблем нет, а вот выйти из приложения не получается. Как можно разрулить?
Попробуйте метод Activity#finish()
Получилось организовать выход из приложения через метод dispatchKeyEvent
(KeyEvent event) (хотя, возможно, это и корявый способ, но он работает). Но
погодя понял, что лучше предложить пользователю подтверждать сие действие через
диалоговое окно. Нашел пример кода в просторах интернета, но при подключении
опять перестал работать выход, и более того никакого диалогового окна не наблюдается???
public class FragmentActivity extends AppCompatActivity {
public static final String TAG = "TESTING";
private FragmentManager mFragmentManager;
protected Fragment createFragment() {
return GreetFragment.newInstance();
}
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_fragment);
mFragmentManager = getSupportFragmentManager();
Fragment fragment = mFragmentManager.findFragmentById(R.id.fragment_container);
Log.i(TAG, "protected void onCreate(Bundle savedInstanceState)");
if (fragment == null) {
fragment = createFragment();
mFragmentManager.beginTransaction()
.add(R.id.fragment_container, fragment)
.commit();
}
}
@Override
public boolean dispatchKeyEvent(KeyEvent event) {
if (event.getAction() == KeyEvent.ACTION_DOWN) {
switch (event.getKeyCode()) {
case KeyEvent.KEYCODE_BACK:
if (mFragmentManager.getBackStackEntryCount() == 0){
openQuitDialog();
finish();
}
mFragmentManager.popBackStack();
return true;
}
}
return super.dispatchKeyEvent(event);
}
private void openQuitDialog(){ //метод предлагающий подтвердить выход
AlertDialog.Builder quitDialog = new AlertDialog.Builder(FragmentActivity.this);
quitDialog.setTitle(R.string.quit);
quitDialog.setPositiveButton(R.string.yes, new DialogInterface.OnClickListener(){
@Override
public void onClick(DialogInterface dialogInterface, int which){
finish();
}
});
quitDialog.setNegativeButton(R.string.no, new DialogInterface.OnClickListener(){
@Override
public void onClick(DialogInterface dialogInterface, int which){
}
});
}
}
Продвижение своими сайтами как стратегия роста и независимости