2014-01-13 6 views
0

У меня есть 2 вида деятельности: MainActivity и SettingActivity.Кнопка возврата назад после запуска операции в меню опций

Первоначально приложение запускается до MainActivity. Я начинаю из меню:

@Override 
public boolean onOptionsItemSelected(MenuItem item) { 
    switch(item.getItemId()) { 
     case R.id.action_settings: 
      Intent settingActivity = new Intent(MainActivity.this, SettingActivity.class); 
      startActivity(settingActivity); 
      return true; 
     default: 
      return super.onOptionsItemSelected(item); 
    } 
} 

Тогда есть кнопка Сохранить в SettingActivity. В функции onClick, он будет возвращен к MainActivity по:

Intent mainActivity = new Intent(SettingActivity.this, MainActivity.class); 
startActivity(mainActivity); 

1 вопрос, этот поток правильно?

Далее, во время я хожу в SettingActivity и нажмите кнопку Сохранить, чтобы вернуться к MainActivity, когда я нажимаю кнопку Back, она восходит к SettingActivity. Я ожидаю, что кнопка «Назад» вернется, чтобы закрыть приложение (не нужно убивать приложение), вместо того, чтобы возвращаться к настройкам. Итак, мой второй вопрос, как я могу создать свое ожидаемое поведение?

Боковое примечание: совершенно новое для Android, в концепции iOS с использованием UINavigationController, оно вернется к предыдущей спине, когда кнопка «Назад» на UINavigationBar.

+0

Вы должны закончить SettingActivity перед вызовом MainActivity. – Andrain

ответ

1

Вместо повторный запуск MainActivity с помощью startActivity() позвонить вместо этого вы должны вызвать finish() на SettingsActivity в вашей методе сохранения, после того как вы упорно ваши различные изменения.

Поведение по умолчанию приведет вас к последнему запущенному действию, в этой ситуации MainActivity.

Более полный пример;

// MainActivity 
@Override 
public boolean onOptionsItemSelected(MenuItem item) { 
    switch(item.getItemId()) { 
     case R.id.action_settings: 
      Intent settingActivity = new Intent(MainActivity.this, SettingActivity.class); 
      startActivity(settingActivity); 
      return true; 
     default: 
      return super.onOptionsItemSelected(item); 
    } 
} 

@Override 
protected void onResume() { 
    // This will be called after you finish SettingsActivity. 
} 

// SettingsActivity 
private void save() { 
    // Save your current options 

    finish(); 
} 
1

Вы только начинаете основное действие снова из активности настройки. Вот почему значение настройки установлено как предыдущее действие в стеке действий. Существует несколько вариантов достижения желаемого. Но я бы решил закончить действие «Настройка», когда работа выполнена. Таким образом, вы автоматически перейдете на главную деятельность.

2

Просто позвоните finish(); из SettingActivity вместо

Intent mainActivity = new Intent(SettingActivity.this, MainActivity.class); startActivity(mainActivity);

+1

Я так, +1 от меня –

1

Тогда есть кнопка Сохранить в SettingActivity. В функции OnClick, то он будет возвращен к MainActivity по:

Intent mainActivity = new Intent(SettingActivity.this, MainActivity.class); 
startActivity(mainActivity);" 

Пожалуйста, замените этот

Intent mainActivity = new Intent(SettingActivity.this, MainActivity.class); 
startActivity(mainActivity); 

по

finish(); 
1

Ваш обратно стек при переходе к SettingsActivity является:

MainActivity 
SettingsActivity 

Поэтому, когда вы нажимаете SAVE и создаете другое намерение MainActivity, ваш параметр SettingsActivity переходит в фоновый режим, поэтому, когда вы нажимаете BACK, он возвращается к настройкам, потому что SettingsActivity возобновляется. Это нормальное поведение Android.

То, что вы хотите сделать, это закончить SettingsActivity, поэтому при нажатии кнопки SAVE в настройках, просто вернуться к предыдущей (MainActivity) по телефону:

finish(); 

вместо Намерение MainActivity.

Прочитать документацию here и here.

0

Активность ActivityGroup вы можете контролировать, чтобы контролировать свои действия. Всякий раз, когда вы раздуваете действие, вы нажимаете операцию в стек, и всякий раз, когда вы нажимаете назад, вы выталкиваете активность из стека.

Смежные вопросы