Подтвердить что ты не робот

Кнопка Android Action Вверх и кнопка "Назад"

Я использую Actionbar и кнопку "вверх", чтобы вернуться от элементарной активности к основной активности, которая работает нормально. Аналогично, пользователь может нажать кнопку "назад" системы, чтобы вернуться к основному действию.

В моем основном действии, в onCreate() данные загружаются из Интернета для отображения при запуске приложения. Я заметил, что, когда я использую кнопку "вверх" Actionbar, чтобы перейти от детали к основной активности, выполняется onCreate(), перегружая данные. Но onCreate() не запускается, когда я использую кнопку "Назад" системы, поэтому сразу отображается основной вид активности.

Код, который я использую в подробном действии для реализации кнопки "вверх":

switch (item.getItemId()) {
   case android.R.id.home:
      Intent intent = new Intent(this, MainActivity.class);
      intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
      startActivity(intent);
      return true;

Я хотел бы, чтобы кнопка "вверх" вела себя как кнопка "назад", а не повторять onCreate(). Но я не уверен, как это сделать, или какой путь кода используется для возврата к основной активности.

Спасибо!

4b9b3361

Ответ 1

Вместо того, чтобы начать совершенно новую деятельность, просто закончите работу с деталями, которые вы находитесь в

switch (item.getItemId()) {
   case android.R.id.home:
      finish();
      return true;

Затем вы вернетесь к предыдущему действию в стеке активности (ваше основное действие), а onCreate не следует называть

Ответ 2

Если вы хотите, чтобы Up сделал именно то, что делает Back, вы можете сделать это:

@Override
public boolean onOptionsItemSelected(MenuItem item) {
    switch(item.getItemId()) {
        case android.R.id.home:
            onBackPressed();
            return true;
        default:
            break;
    }
    return super.onOptionsItemSelected(item);
}

Обратите внимание, что реализация по умолчанию onBackPressed() просто вызывает finish(), но onBackPressed может быть переопределена.

Ответ 3

Я думаю, что лучшее решение можно найти в этом сообщении.

Вызов finish() работает в определенных ситуациях, но может не всегда вызывать описанное поведение в документации, например:

enter image description here

Вызывая

Intent intent = NavUtils.getParentActivityIntent(this); 
intent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP|Intent.FLAG_ACTIVITY_SINGLE_TOP); 
NavUtils.navigateUpTo(this, intent);

вы вернетесь к родительской активности в состоянии, в котором вы ее оставили. Если у вас есть плоская структура приложения, она будет действовать так же, как кнопка "Назад".

Ответ 4

для реальной "домашней" функциональности вы должны увидеть демонстрацию api в разделе "Действия приложения/активности/порядка".

причина: что, если у вас есть что-то вроде этого: activity1- > activity2- > activity3, и теперь вы хотите перейти к активности1, нажав кнопку "домой" на панели действий?

Ответ 5

Я считаю, что самый простой способ - переопределить метод getParentActivityIntent для подробного действия с добавлением флага "Intent.FLAG_ACTIVITY_CLEAR_TOP":

@Nullable
@Override
public Intent getParentActivityIntent() {
    Intent intent = super.getParentActivityIntent();
    if (intent != null) {
        return super.getParentActivityIntent().addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
    }
    return intent;
}

Ответ 6

Есть другое решение, которое может быть доступно кому-то. У меня было такое же двойное поведение, когда пользователь нажал кнопки Back и ActionbarBack. Я был в порядке с поведением Back btn. Я не хотел, чтобы деятельность была воссоздана. Поэтому я перепробовал метод

     @Override
public boolean onSupportNavigateUp() {
    onBackPressed();
    return true;
}

Прекрасно работает для меня