2012-01-10 29 views

回答

1

你可以試試這個:

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

你沒有做到這一點。刪除這段代碼將具有完全相同的效果! – 2012-01-10 09:42:48

+0

是.. !!!你是對的但是onBackPressed已被棄用...我經歷過,有時onBackPressed沒有被調用。所以把onKeyDown對我來說更好。然而,默認情況下,如果您按下後退按鈕,它將引導您進入前一個屏幕。 – 2012-01-10 09:58:33

+0

「但是,默認情況下,如果您按下後退按鈕,它會引導您前一個屏幕」:系統執行此操作的方式是通過調用活動的finish()。你也在做什麼。 – 2012-01-11 02:39:27

0

ü要重寫的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

好,用於啓動家庭sceenØ ˚F您的設備使用此代碼在您的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 – 2012-01-10 09:42:11

+0

@Vikram Bodicherla - 哪一個不是一個好主意? – user370305 2012-01-10 09:47:56

+0

第一個問題很糟糕:您正在啓動主屏幕並要求將其作爲新任務啓動。由於主屏幕一直在運行,系統將忽略您的標誌。更重要的是,我們希望清理當前任務的活動堆棧,而不是跳轉到主屏幕。第二種方法也不好,你正在做操作系統應該爲謀生而做的事情。調用finish()就足夠了,決定進程是否被殺死,是OS的工作。無論如何,你已經提到過你自己。 – 2012-01-10 09:54:23

18

按BACK鍵將有效地爲您撥打finish()。沒有必要捕獲BACK鍵。

我假設你的問題是,當你按下BACK鍵時,它只是回到你的應用程序中以前的Activity

如果是這樣,則情況下做出的一切活動「自終止」當他們開始在你的應用新Activity ....

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

如果你這樣做,那麼就不會有Activity返回當你按下BACK時,它會一直返回到主屏幕。

+0

這應該是被接受的答案。像我這樣的魅力工作 – 2013-06-18 02:03:36

+0

這聽起來很合理。 – Recomer 2016-03-10 13:25:38

+0

它只是將另一個活動放在堆棧上。要回去,你必須在意圖中設置一個標誌。 FLAG_ACTIVITY_CLEAR_TOP – 2016-03-11 16:35:43

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 2012-01-10 07:39:03

+1

爲什麼,請解釋。我喜歡這個,當我只是不想讓背部做任何事情比這更多。 – taxeeta 2013-10-22 16:22:44

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 – 2016-03-11 16:36:22

0

您可以從任何地方關閉的應用程序調用此類型的意向:

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

這是從任何地方接近應用的最佳方式,在任何click事件

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; 
} 

野蠻方式

相關問題