Ответ 1
Используйте
Intent intent = new Intent(SyncActivity.this, MainActivity.class);
intent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
startActivity(intent);
Мне любопытно об одном. Как я могу закончить свою текущую деятельность и начать другую.
Пример:
MainActivity --(starts)--> LoginActivity--(if success starts)-->SyncActivity--(if success start)-->MainActivity (with updated data).
Поэтому, когда SyncActivity
запускает SyncActivity
после succesfull sync, и если я нажимаю кнопку "Назад", чтобы не возвращаться к SyncActivity
или к любой другой активности, открытой до SynActivity
.
Я пробовал с этим кодом:
Intent intent = new Intent(Synchronization.this, MainActivity.class);
intent.addFlags(Intent.FLAG_ACTIVITY_NO_HISTORY);
startActivity(intent);
this.finish();
но он работает неправильно. Любые идеи о том, как заставить вещи работать правильно?
Используйте
Intent intent = new Intent(SyncActivity.this, MainActivity.class);
intent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
startActivity(intent);
Судя по вашему OP, я не уверен, что вы абсолютно должны дважды инициализировать свою основную активность.
Android разработан так, что приложение никогда не закрывается пользователем. Сосредоточьтесь на переопределении методов жизненного цикла Android, таких как OnResume и OnPause, чтобы сохранить данные пользовательского интерфейса и т.д.
Следовательно, вам не нужно явно указывать finish()
основное действие (и действительно не должно). Чтобы получать логин или синхронизировать данные из предыдущих действий, просто переопределите метод OnActivityResult()
. Однако для этого вы должны начать работу с помощью startActivityForResult(intent)
. Поэтому для каждого действия вы должны это сделать:
Основная деятельность:
static public int LOGIN_RETURN_CODE = 1;
чтобы начать вход в систему:
Intent intent = new Intent(MainActivity.this, LogInActivity.class);
startActivityForResult(intent, LOGIN_RETURN_CODE);
чтобы получить информацию для входа:
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
switch (requestCode) {
case LOGIN_RETURN_CODE:
//do something with bundle attached
}
}
Активность входа:
static public int SYNC_RETURN_CODE = 2;
чтобы начать синхронизацию:
Intent intent = new Intent(LogInActivity.this, SyncActivity.class);
startActivityForResult(intent,SYNC_RETURN_CODE);
чтобы получить информацию и вернуться к Main:
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
switch (requestCode) {
case MainActivity.SYNC_RETURN_CODE:
Intent intent = new Intent(...);
intent.setResult(RESULT_OK);
finish();
}
}
Это может не все компилироваться, но, надеюсь, вы получите эту идею.