1

Я не знаю, как сформулировать этот вопрос.Как происходит иногда, когда я нажимаю кнопку «Назад», есть больше действий, чем должно быть?

Мое приложение имеет простой ViewPager, и вы нажимаете на что-то на одной из этих фрагментов страницы, и оно переносит вас в другое действие. Нажмите кнопку «Назад», и она вернет вас в ViewPager. Нажмите еще раз и закрывает приложение.

Однако иногда, когда я нажимаю клавишу «Назад» на ViewPager, он снова возвращает меня к другой активности, а затем я отжимаю ее назад, и она возвращает меня в ViewPager и так далее, пока приложение, наконец, не закроется. Другими словами, это похоже на запасные оставшиеся экземпляры ViewPager или другой активности в backstack (я думаю, что это называется), но я не знаю, как и почему это происходит.

Я также не знаю, как воспроизвести ошибку, что еще более расстраивает. Большую часть времени он работает так, как ожидалось, но иногда оставшиеся экземпляры просто появляются из ниоткуда, когда я нажимаю назад.

Как я могу гарантировать, что, когда я нажимаю кнопку «Назад» на другой операции, она возвращается к ViewPager, и когда я нажимаю на ViewPager, она закрывает приложение?

@Override 
public boolean onOptionsItemSelected(MenuItem item) { 
    switch (item.getItemId()) { 
     case android.R.id.home: //called when I press back button on the phone or the back-arrow on the toolbar 
      onBackPressed(); 
      return true; 
     default: 
      return super.onOptionsItemSelected(item); 
    } 
} 

//and then usually that's all I have, but in one particular Activity, I do override the function: 

@Override 
public void onBackPressed() { 
    if (some conditions are met) { 
     finish(); 
     super.onBackPressed(); 
    } 
    else { 
     //display some error message 
    } 
} 

Вот как я запускаю свою деятельность:

public void launchSomeActivity() { 
    Intent intent = new Intent(getActivity(), ActivityName.class); 
    intent.putExtra(etc etc etc); 
    startActivityForResult(intent, REQUEST_CODE); 
} 
+0

Вы звоните 'послевкусие()' при запуске новых видов деятельности? –

+0

Я добавил код к сообщению –

+1

FInish() и super.onBackPress() одинаково используют любой из этих методов. – ramji

ответ

1

Вероятно, вы видите неприятную давнишнюю Android ошибка. Если вы впервые запускаете приложение из среды IDE или из программы установки, когда вы помещаете приложение в фоновом режиме и запускаете его снова с экрана HOME, Android создает еще один экземпляр вашего корневого Activity. Это будет демонстрировать именно то поведение, о котором вы сообщаете. Если вы впервые запустите приложение, нажав значок приложения на экране HOME (или списке доступных приложений), проблема не возникает.

См Re-launch of Activity on Home button, but...only the first time