2012-05-31 39 views
0

在我的應用程序,當我點擊它經過的一切,我打開它們先前活動的後退按鈕,我使用的公共無效onBackPressed()方法,使後退按鈕返回,我想作爲後續活動如何在按下主要活動中的按鈕時使申請退出?

public void onBackPressed() 
    { 
    startActivity(new Intent("com.MyDiet.Main")); 
    Tracker.this.finish(); 
    } 

是編碼後退按鈕的真實且安全的方法嗎?當按下後退按鈕時,如何防止應用程序通過所有以前打開的活動?以及當我點擊主要活動中的後退按鈕時,如何讓應用程序退出?

+0

如果主要活動你的意思是目前顯示的活動,你只有每startActivity/startActivityForResult – Blackbelt

+0

http://stackoverflow.com/q/2033914/1289716 – MAC

+0

我的意思通過之後調用Activity.finish()主要活動的基本活動「閃屏後的第一個午餐活動」,而不是做一個退出按鈕退出應用程序我想要做的後面的按鈕 – user

回答

1

在您的應用程序和所有android應用程序中,除非不經過不必要的步驟(例如登錄,如果您已經登錄),否則非常重要的是不要重寫Android標準行爲。用戶通常抱怨沒有共同行爲或風格指南的Android應用程序。

無論如何,是的,你可以在你所有的活動上覆蓋onBackPressed並做你想做的任何事情。但是不要。

+0

「但是,不要」爲什麼?這會影響活動信息嗎? – user

+0

他正在談論用戶期望什麼。可能在這種情況下,用戶不會知道你是如何編寫代碼的,也許他甚至不會注意到任何不尋常的情況(如果你已經從'Main'來到'Tracker'),但是開始來自onBackPressed的活動並不常見,因此其他開發人員或您在幾個月內都會遇到問題需要通過代碼和應用程​​序流程。:S btw。要在應用程序標準規則和用戶期望中實現所需的UI行爲或效果但有時我們需要重寫一些方法.. – Ewoks

0

這種做法是不好的,因爲你污染你的應用程序的活動堆棧

例子:

當前堆棧:MainAct - > ACT2 - > ACT3(我們在活動3)

與您的代碼上面,當你按下回來,堆棧現在看起來如下:

MainAct - > ACT2 - > MainAct

因爲你結束了Act3併發起了一項新的主要活動,這可能不是你想要的。你需要處理中間活動:在上面的例子中,當你從Act2調用startActivity(「Act3」)時,你應該調用這個方法來實現你想要的(在當前活動結束時返回主體) 「this.finish()」。因此,您不必覆蓋活動3的「onBackPressed()」:只是默認值將終止Act3,堆棧中的下一個活動將爲MainAct

MainAct - > A2(A2啓動A3,然後調用此函數.finish())

MainAct - > A3(現在用戶按下背面)

MainAct(在mainActivity現在是頂部)

要只概括,你不必重寫onBackPressed,你必須正確地管理主要和當前活動之間的活動的生命週期。

+0

感謝您的幫助 – user

0

一般來說,不建議讓事情像用戶不期望的那樣工作,這被認爲是非常糟糕的做法。這就是爲什麼從覆蓋開始活動onBackPressed()並不好。

默認情況下,用戶按下後,活動將結束,並顯示back stack中的一個。你作爲開發者將(通過編寫代碼)決定哪一個是那個。你可以這樣做,但後來(或對其他人),它會有點混亂,很難找到這個不尋常的地方開始其他活動的代碼。

因此..閱讀activity lifecycleback stack以瞭解其工作原理並更好地理解術語將會很有用。

如果您希望您的活動之一不要停留在背靠背上,您可以爲該活動添加manifest file文件android:noHistory="true"

您可以通過添加適當的標誌的意圖,當您啓動活動從代碼實現同樣的事情:Intent.FLAG_ACTIVITY_NO_HISTORY

當用戶「離開」從ActivityOne(開始使用意圖或manifest等記述定義),以新的ActivityTwo然後按回來,它將不會進入ActivityOne,因爲它不會返回堆棧。使用這個,你可以精確地控制你的活動導航。

More flags可供使用,但我想這是你想達到的。

希望你會發現我的答案有用。乾杯..

+0

謝謝verrrry much,它非常有用,我想知道哪些是以下退出應用程序的最佳方式:添加退出菜單項以退出應用程序或者讓應用程序在單擊後退按鈕時正常退出?你可以幫我在這 – user

+0

你可以重寫onBackPressed,因爲你嘗試了一些不包括'startActivity(new Intent(「com.MyDiet.Main」))''line的細微變化。比方說: 'public void onBackPressed() { Tracker.this.finish(); }' 其他選項,添加退出菜單會有相同的'finish()'調用。所以這兩種方法都有相同的結果,而不是那麼不尋常的做法。 但是,您可能有興趣閱讀@ RetoMeier關於後退按鈕和退出應用程序的文章。 http://goo.gl/E4iR他是領先的谷歌機器人工程師之一,他建議這些事情由Android操作系統來處理。有些人同意,有些人不同意.. – Ewoks

0

你可以使用很多技巧來退出你的完成應用程序我的部分我使用這個開始一個意圖,然後從androidmanifest我選擇類別回家,並關閉當前的活動,這將是你的主要活動!

public void onBackPressed() { 
    Intent intent = new Intent(Intent.ACTION_MAIN); 
    intent.addCategory(Intent.CATEGORY_HOME); 
    intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK); 
    startActivity(intent); 
    finish(); 
} 
相關問題