對於Android,假設3個活動,a1 a2 a3,以及它們的點擊層次結構a1-> a2-> a3。Android,如何檢測該活動是否來自其他活動?
我的問題是在a2中,如何檢測它是從a3按下後退鍵而不是從a1進入?
對於Android,假設3個活動,a1 a2 a3,以及它們的點擊層次結構a1-> a2-> a3。Android,如何檢測該活動是否來自其他活動?
我的問題是在a2中,如何檢測它是從a3按下後退鍵而不是從a1進入?
onCreate
不會在背壓的情況下調用。
有多種方式可以推斷出您是否通過回推鍵抵達此活動。
集的OnCreate,上面寫着一個boolean
上onCreate
被調用。
通過調用startActivityForResult
開始C活動,當您從C onActivityResult
返回時將被調用。
當你開始你的活動時把一些關鍵的意圖。
Intent intent = new Intent(getBaseContext(), A1Activity.class);
intent.putExtra("I_CAME_FROM", "a1");
startActivity(intent)
而且在開業活動閱讀:
String flag = intent.getStringExtra("I_CAME_FROM");
if(flag.equlas("a1")){
//you came from a1 activity
}
這將讓你瞭解你來自哪裏。
這是一個不使用應用程序級標誌或startActivityForResult的好方法。你也可以在你的activity(a3)中重寫onBackPressed()函數來發送一個帶有額外指示intent.putExtra(「I_CAME_FROM」,「BackButton」)的intent。併發送給(a2)。 – Deemoe
您可以使用以下方法
onCreate()
當第一次創建活動(從A1到A2)。當您通過按下後退按鈕返回時,此方法不會被調用。
onRestart()
活動是在後臺,並來到前臺(背壓在A3)
我想知道爲什麼沒有人會在這個帖子和另外一篇關於提示'onRestart()'的同一個問題上發帖。這似乎是一個很少被人注意的生命週期體育場。但這是唯一一種在回去之後肯定會被調用的方法。 – Opiatefuchs
這些方法都不正確。當用戶按下後退按鈕,在進程被終止後(例如,用戶可能從任務列表中選擇了子活動)返回到其子活動時,可以調用onCreate()。當你從任何地方返回活動時,不僅通過按下子活動的後退按鈕,onRestart()會被調用。 – LarsH
您可以使用onActivityResult
檢查來自另一個活動的回報。把你的A2活動中的代碼...
聲明請求代碼爲常數,在您的活動的頂部:
public static final int OPEN_NEW_ACTIVITY = 123456;
將這個你開始新的活動:
Intent intent = new Intent(this, NewActivity.class);
startActivityForResult(intent, OPEN_NEW_ACTIVITY);
活動結束後做些事情。文檔建議您使用resultCode
,但根據具體情況,按下按鈕時,結果可以是RESULT_OK
或RESULT_CANCELED
。所以我會放棄它。
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
if (requestCode == OPEN_NEW_ACTIVITY) {
// Execute your code on back here
// ....
}
}
由於某種原因,我在將它放入碎片時遇到了麻煩。所以你必須把它放在活動中。
您實際上不必在a3活動中放置任何代碼,但是如果您願意,您可以發回數據。
我用它來檢測何時從設置活動回來。 – lenooh
你的意思是如果你按下後退鍵在a2它會傳遞給你a3? – DavidBalas
當從a1調用a2時,爲了表示它來自a1,添加一個額外元素。所以如果a2在a3的背部按鍵上達到,那麼這個額外的東西就不存在了。我沒有嘗試過,但理論上聽起來似乎合理。 – faizal
[如何檢測是否從孩子活動回來?](https://stackoverflow.com/questions/7982081/how-to-detect-if-came-back-from-child-activity) –