2012-01-10 2 views

ответ

1

Вы можете попробовать это:

public boolean onKeyDown(int keyCode, KeyEvent event) 
{  
    if(keyCode==KeyEvent.KEYCODE_BACK){ 
     this.finish(); 
     } 
    return true; 
} 
+0

Вы ничего не достигли, выполнив это. Удаление этого фрагмента кода будет иметь тот же эффект! –

+0

Да .. !!! Вы правы, но onBackPressed устарел ...и я испытал, что иногда onBackPressed не вызывается. Так что, полагаясь на KeyDown, мне лучше понять. Однако по умолчанию, если вы нажмете кнопку «Назад», она приведет вас к предыдущему экрану. –

+0

«Однако по умолчанию, если вы нажмете кнопку« Назад », она приведет вас к предыдущему экрану»: способ, которым система это делает, заключается в вызове функции finish(). Это то, что вы делаете. –

0

и хочет 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); 
} 
3

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()) этот код убивает ваше приложение. (Некоторый уродливый путь ..!)

+0

Это не очень хорошая идея! Посмотрите ответ на http://stackoverflow.com/questions/3473168/clear-the-entire-history-stack-and-start-a-new-activity-on-android –

+0

@Vikram Bodicherla - какой из них не является хорошая идея? – user370305

+0

Первый плохой: вы начинаете начальный экран и просите его начать как новую задачу. Система будет игнорировать ваш флаг, поскольку главный экран всегда работает. И что более важно, мы хотели бы очистить стек активности для текущей задачи, а не переходить на главный экран. Второй подход тоже плох, вы делаете то, что ОС должно делать для жизни. Вызов finish() достаточно, чтобы решить, должен ли процесс быть убит или нет, - это работа ОС. Вы так и говорили об этом. –

18

Нажатие кнопки BACK эффективно вызовет finish() для вас. Нет необходимости захватывать клавишу BACK.

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

Если это так, то сделать все виды деятельности «самостоятельно прекратить», когда они начинают в приложении новый Activity ....

startActivity(new Intent(this, MyNewActivity.class)); 
finish(); 

Если вы сделаете это, то не будет никакого Activity вернуться когда вы нажмете BACK и он всегда вернется на главный экран.

+0

Это должен быть принятый ответ. Работаю как прелесть для меня –

+0

Это звучит довольно разумно. – Recomer

+0

Он просто поместит еще одно действие в стек. Чтобы вернуться назад, вы должны установить флаг в намерении. FLAG_ACTIVITY_CLEAR_TOP –

3

Вы должны заменить отделку()

@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(); 
    } 
+2

Пожалуйста, не рекомендуйте это людям. На самом деле Android не работает. – Squonk

+1

Почему, пожалуйста, объясните. Мне нравится это, когда я просто не хочу, чтобы спина делала что-то другое, кроме этого. – taxeeta

2

При вызове NewAcitivy вызова finish() .После startActivity так что предыдущий актив- ности закрывается.

Затем используйте

@Override 
    public void onBackPressed() { 
     super.onBackPressed(); 
     this.finish(); 
    } 
0

Легкий способ просто закончить текущую активность, когда вы двигаетесь к следующей деятельности.

Только сделайте finish() после startActivity(), а затем на спине прессы от любой деятельности, вы можете просто позвонить finish(), чтобы выйти из приложения, как и все другие виды деятельности, не существует в стеке.

6

Вы можете попробовать это

@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); 
    } 
+0

Я думаю, что в этом случае лучше использовать FLAG_ACTIVITY_CLEAR_TOP –

0

Вы можете закрыть приложение из любой точки назвать этот тип Intent:

Intent intent = new Intent(Intent.ACTION_MAIN); 
intent.addCategory(Intent.CATEGORY_HOME); 
intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK); 
startActivity(intent); 

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

0

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

public void onBackPressed() { 
    Intent intent = new Intent(this, HomeActivity.class); 
    intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP); 
    this.startActivity(intent); 
    this.finish(); 
} 
0

Цитируя Официальном 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); 
    } 
0
public void onBackPressed() { 
System.exit(1); 
    return; 
} 

Жестокий способ

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