У меня есть активность с двумя осколками (Список & Подробности), в OnCreate(), я начинаю список фрагмент, если savedInstance равно нуль, как такPopbackstack Завершает активность в OnBackPressed
public static final int CLIENT_LIST_FRAGMENT = 1;
public static final int CLIENT_DETAILS_FRAGMENT = 2;
private int currentFragment = 0;
if (savedInstanceState == null) {
//On first run, start the list fragment
if (currentFragment == 0) {
ClientListFragment listFrag = new ClientListFragment();
getSupportFragmentManager().beginTransaction()
.add(R.id.container_client, listFrag, Constants.CLIENT_LIST_FRAGMENT_TAG)
.commit();
currentFragment = CLIENT_LIST_FRAGMENT;
} else {
switch (currentFragment) {
case CLIENT_LIST_FRAGMENT:
addListFragment();
break;
case CLIENT_DETAILS_FRAGMENT:
addDetailsFragment(0);
break;
}
}
}
А вот метод, который добавить DetailsFragment и ListFragment по мере необходимости
private void addListFragment(){
ClientDetailsFragment listFrag = new ClientDetailsFragment();
getSupportFragmentManager().beginTransaction()
.replace(R.id.container_client, listFrag, Constants.CLIENT_LIST_FRAGMENT_TAG)
.addToBackStack("details")
.commit();
currentFragment = CLIENT_LIST_FRAGMENT;
}
private void addDetailsFragment(long companyId){
ClientDetailsFragment detailsFrag = ClientDetailsFragment.newInstance(companyId);
getSupportFragmentManager().beginTransaction()
.replace(R.id.container_client, detailsFrag, Constants.CLIENT_DETAILS_TAG)
.addToBackStack(null)
.commit();
currentFragment = CLIENT_DETAILS_FRAGMENT;
}
Это работает, как ожидается, за исключением того, что, когда я нажимаю кнопку назад от Подробности фрагмента, вместо того, чтобы меня обратно к списку фрагмента, он фактически завершает активность. Он возвращается к фрагменту списка за долю секунды, а затем завершает работу с хостом и возвращается к вызывающей активности. Как я могу остановить это поведение, пройдя через множество связанных onBackpress вопрос о SO вот мой overide из onBackPressed
@Override
public void onBackPressed() {
if (currentFragment == CLIENT_DETAILS_FRAGMENT){
getSupportFragmentManager().popBackStackImmediate();
}else {
super.onBackPressed();
}
}
Благодарности
Спасибо и я попробую свой код в немного, я устранить тот факт, что OnDestroy не будет вызван независимо от того, как я справилась с onbackpressed поэтому моя задача сейчас, чтобы выяснить, как остановить OnDestroy от призыва, когда I onBackpressed называется –
Ну, это означает, что 'this.finish()' вызывается _application_ или _system_ ** (этот экземпляр действия уничтожается, чтобы сэкономить место) ** [Проверить документацию] (http://developer.android.com/reference/android/app/Activity.html). – Prince
Хм, на простом приложении. Спасибо, я пытаюсь понять, как это предотвратить. Спасибо за ваш код, он указывает мне в правильном направлении. –