Я хочу пойти на главном экране, когда я нажимаю button.I назад устройства я использую этот код ..Как я могу закрыть приложение на спине нажимом андроид
public void onBackPressed() {
this.finish();
return;
}
Я хочу пойти на главном экране, когда я нажимаю button.I назад устройства я использую этот код ..Как я могу закрыть приложение на спине нажимом андроид
public void onBackPressed() {
this.finish();
return;
}
Вы можете попробовать это:
public boolean onKeyDown(int keyCode, KeyEvent event)
{
if(keyCode==KeyEvent.KEYCODE_BACK){
this.finish();
}
return true;
}
Вы ничего не достигли, выполнив это. Удаление этого фрагмента кода будет иметь тот же эффект! –
Да .. !!! Вы правы, но onBackPressed устарел ...и я испытал, что иногда onBackPressed не вызывается. Так что, полагаясь на KeyDown, мне лучше понять. Однако по умолчанию, если вы нажмете кнопку «Назад», она приведет вас к предыдущему экрану. –
«Однако по умолчанию, если вы нажмете кнопку« Назад », она приведет вас к предыдущему экрану»: способ, которым система это делает, заключается в вызове функции finish(). Это то, что вы делаете. –
и хочет Override финишной активности OnKeyDown &
@Override
public boolean onKeyDown(int keyCode, KeyEvent event) {
if (keyCode == KeyEvent.KEYCODE_BACK && event.getRepeatCount() == 0) {
// do something on back.
this.finish();
return true;
}
return super.onKeyDown(keyCode, event);
}
Ok, для запуска Home Sceen O е устройство использовать этот код в onKeyDown()
@Override
public boolean onKeyDown(int keyCode, KeyEvent event) {
if (keyCode == KeyEvent.KEYCODE_BACK && event.getRepeatCount() == 0) {
// do something on back.
Intent startMain = new Intent(Intent.ACTION_MAIN);
startMain.addCategory(Intent.CATEGORY_HOME);
startMain.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
startActivity(startMain);
this.finish();
return true;
}
return super.onKeyDown(keyCode, event);
}
И если вы хотите, чтобы закрыть приложение, то я думаю, либо вы должны закрыть все действия по finish()
способом (некоторый стандартный способ) или с помощью
android.os.Process.killProcess(android.os.Process.myPid())
этот код убивает ваше приложение. (Некоторый уродливый путь ..!)
Это не очень хорошая идея! Посмотрите ответ на http://stackoverflow.com/questions/3473168/clear-the-entire-history-stack-and-start-a-new-activity-on-android –
@Vikram Bodicherla - какой из них не является хорошая идея? – user370305
Первый плохой: вы начинаете начальный экран и просите его начать как новую задачу. Система будет игнорировать ваш флаг, поскольку главный экран всегда работает. И что более важно, мы хотели бы очистить стек активности для текущей задачи, а не переходить на главный экран. Второй подход тоже плох, вы делаете то, что ОС должно делать для жизни. Вызов finish() достаточно, чтобы решить, должен ли процесс быть убит или нет, - это работа ОС. Вы так и говорили об этом. –
Нажатие кнопки BACK эффективно вызовет finish()
для вас. Нет необходимости захватывать клавишу BACK.
Я предполагаю, что ваша проблема заключается в том, что когда вы нажимаете клавишу BACK, она просто возвращается к предыдущему Activity
в вашем приложении.
Если это так, то сделать все виды деятельности «самостоятельно прекратить», когда они начинают в приложении новый Activity
....
startActivity(new Intent(this, MyNewActivity.class));
finish();
Если вы сделаете это, то не будет никакого Activity
вернуться когда вы нажмете BACK и он всегда вернется на главный экран.
Это должен быть принятый ответ. Работаю как прелесть для меня –
Это звучит довольно разумно. – Recomer
Он просто поместит еще одно действие в стек. Чтобы вернуться назад, вы должны установить флаг в намерении. FLAG_ACTIVITY_CLEAR_TOP –
Вы должны заменить отделку()
@Override
public void finish() {
System.out.println("finish activity");
SaveData();
System.runFinalizersOnExit(true) ;
super.finish();
android.os.Process.killProcess(android.os.Process.myPid());
}
Затем вызовите этот метод следующим образом:
@Override
public void onBackPressed() {
this.finish();
}
При вызове NewAcitivy вызова finish()
.После startActivity
так что предыдущий актив- ности закрывается.
Затем используйте
@Override
public void onBackPressed() {
super.onBackPressed();
this.finish();
}
Легкий способ просто закончить текущую активность, когда вы двигаетесь к следующей деятельности.
Только сделайте finish()
после startActivity()
, а затем на спине прессы от любой деятельности, вы можете просто позвонить finish()
, чтобы выйти из приложения, как и все другие виды деятельности, не существует в стеке.
Вы можете попробовать это
@Override
public void onBackPressed() {
Intent startMain = new Intent(Intent.ACTION_MAIN);
startMain.addCategory(Intent.CATEGORY_HOME);
startMain.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
startActivity(startMain);
}
Я думаю, что в этом случае лучше использовать FLAG_ACTIVITY_CLEAR_TOP –
Вы можете закрыть приложение из любой точки назвать этот тип Intent:
Intent intent = new Intent(Intent.ACTION_MAIN);
intent.addCategory(Intent.CATEGORY_HOME);
intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
startActivity(intent);
Это самый лучший способ для близкого применения из любой точки, в любом случае клик
Вам нужно начать с использования флага, чтобы очистить действия поверх фактической активности.
public void onBackPressed() {
Intent intent = new Intent(this, HomeActivity.class);
intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
this.startActivity(intent);
this.finish();
}
Цитируя Официальном Guideline
FLAG_ACTIVITY_CLEAR_TOP
Если установлено, и активность запускаемые уже работает в текущей задаче , то вместо запуска нового экземпляра от этого деятельность, все остальные действия на ней будут закрыты и это намерение будет доставлено на старую деятельность (сейчас сверху) как новое задание .
FLAG_ACTIVITY_CLEAR_TASK
Если установлено в намерениях передается Context.startActivity(), этот флаг будет вызвать любую существующую задачу, которая будет ассоциироваться с деятельностью в быть очищены до начала деятельности запускается. То есть, активность становится новым корнем пустой задачи, и все старые операции завершены. Это можно использовать только в сочетании с FLAG_ACTIVITY_NEW_TASK.
FLAG_ACTIVITY_NO_HISTORY
Если установлено, то новый вид деятельности не сохраняется в стеке истории. Как только пользователь переходит от него, действие завершено. Это может быть также с атрибутом noHistory.
FLAG_ACTIVITY_NEW_TASK
Если установлено, эта деятельность станет началом новой задачи на этой истории стека.
@Override
public void onBackPressed()
{
Intent intCloseApp = new Intent(Intent.ACTION_MAIN);
intCloseApp.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
intCloseApp.addFlags(Intent.FLAG_ACTIVITY_NO_HISTORY);
intCloseApp.addFlags(Intent.FLAG_ACTIVITY_SINGLE_TOP);
intCloseApp.addCategory(Intent.CATEGORY_HOME);
intCloseApp.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
startActivity(intCloseApp);
}
public void onBackPressed() {
System.exit(1);
return;
}
Жестокий способ
Что в чем проблема вы столкнулись с этим кодом? –