2011-07-27 68 views
7

我不能爲我的生活弄清楚如何有按後退按鈕後的活動進行刷新。我現在有活動A,它激發了轉向B的意圖,而在行爲B時,如果你按回來,我想回到行動A但是讓它自行更新。我可以用這個意圖目前刷新活動:使用的onResume()來刷新活動

Intent refresh = new Intent(this, Favorites.class); 
    startActivity(refresh); 
    this.finish(); 

但我無法弄清楚如何正確使用的onResume()函數來刷新我的行爲一回去之後。

+1

您當前的刷新計劃運作可能的原因是因爲你正在運行在標準launchMode活動。這意味着,由於每一個新的實例經過的onCreate(startActivity(刷新)的每次調用生成活性A的新實例),創建這些不必要的情況下,給人耳目一新的活動的出現。爲了正確地做到這一點,你真的應該確定的onCreate(代碼),負責「清涼」活動,並將其移動到的onResume(),如奧維迪烏以下建議。 – glorifiedHacker

回答

10

如果從ActivityB回來時需要的ActivityA一個特殊的行爲,你應該使用startActivityForResult(Intent intent, int requestCode)而不是startActivity(Intent intent)

startActivityForResult(new Intent(this, ActivityB.class), REQUEST_CODE); 

這樣一來,你就可以通過重載onActivityResult(int requestCode, int resultCode, Intent intent)檢測ActivityAActivityB終止:

@Override 
protected void onActivityResult(int requestCode, int resultCode, Intent intent) { 
    super.onActivityResult(requestCode, resultCode, intent); 

    if (requestCode == REQUEST_CODE) { 
     doRefresh(); // your "refresh" code 
    } 
} 

這甚至如果通過後退按鈕的按下終止ActivityB工作。在這種情況下,resultCode默認爲RESULT_CANCELLED

1

你需要的地方,更新你的活動在onResume()方法的UI代碼。也許你應該發佈更多的代碼或解釋你到底想要更新什麼。

+0

我有一個活動,包含從我的數據庫檢索5個字符串的列表視圖。它使用BackService方法運行,即如果數據庫發生變化,我將使用字符串獲取新的通知。如果我點擊那個通知,listview也應該包含該字符串。 OnResume()會允許我這麼做嗎? – suraj

3

使用startActivityForResult(intent, requestCode);Activity A

開始Activity B然後在Activity A覆蓋onActivityResult(int requestCode, int resultCode, Intent data)

那裏你可以刷新Activity A