2012-08-14 81 views
4

我有活動A with listView,用戶單擊任何啓動活動B的項目。根據用戶在活動B中所做的操作,B可能會更改活動A上的listView。Android:當活動返回到前一活動時檢測

所以我的問題:

我怎麼能告訴活性的,它是從何時活動B中的用戶返回到它恢復?

我希望能夠在activity A返回時發出listView的刷新信號。

謝謝!

回答

5

您可以添加代碼以刷新列表視圖活動A的onResume()

@Override 
protected void onResume() { 
    super.onResume(); 
    //Code to refresh listview 
} 
+0

這很像一個魅力。謝謝 – 2012-08-14 05:49:08

+0

請注意,這也被稱爲其他場合,如活動開始,設備輪換等,而不僅僅是從活動B返回。 – 2016-05-22 00:17:29

1

使用startActivityForResult啓動B活動。並檢查活動B的活動A onActivityResult()方法中的數據。使用notifyDataSetChanged爲listView更新內容。

2

使用startActivityForResult是最優雅的方式來做到這一點。 OnResume會在每次關閉並打開應用程序時發生,這會使用更多的資源,尤其是在刷新大量數據的情況下。

聲明請求代碼爲常數,在您的活動的頂部:

public static final int OPEN_NEW_ACTIVITY = 123456; 

將這個你開始新的活動:

Intent intent = new Intent(this, NewActivity.class); 
startActivityForResult(intent, OPEN_NEW_ACTIVITY); 

做一些活動時結束。文檔建議您使用resultCode,但根據具體情況,按下按鈕時,結果可以是RESULT_OKRESULT_CANCELED。所以我會放棄它。

@Override 
protected void onActivityResult(int requestCode, int resultCode, Intent data) { 
    if (requestCode == OPEN_NEW_ACTIVITY) { 
     // Refresh your ListView here 
     // .... 
    } 
} 

由於某種原因,我在將它放入碎片時遇到了麻煩。所以你必須把它放在活動中。

0

我有另一種方式來做到這一點,這可能會在某些情況下,來方便 - 我把私人捆綁變量,我們稱之爲state,當我開始一個活動,我把一個字符串,說我開始哪項活動:

state.putString("startedActivity", "A"); 
Intent intent = new Intent(this, ActivityA.class); 
startActivity(intent); 

我存儲狀態束堅持不懈設備改變(旋轉等):

@Override 
public void onSaveInstanceState(Bundle savedInstanceState) { 
    super.onSaveInstanceState(savedInstanceState); 
    savedInstanceState.putAll(state); 
} 

onCreate我加載狀態:

@Override 
protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    if (savedInstanceState == null) { 
     savedInstanceState = new Bundle(); 
    } 
    state = savedInstanceState; 
} 

然後在onResume方法中,我可以檢查,我是否只是在某個活動。請注意,我立即從狀態中刪除字符串,因此它不會在輪換等情況下再次顯示。

public void onResume() { 
    super.onResume(); 
    if (state.getString(STARTED_ACTIVITY, null) != null) { 
     // we just came from another activity! 
     state.putString(STARTED_ACTIVITY, null); // clear the state 
     // do whatever you need 
    } 
} 
+0

嗯,我這樣做,它的工作,但實際上@ Muz的答案是一樣的,更簡單,所以如果你需要知道,使用他的,你是否真的從孩子的活動回來。 – 2016-05-22 00:15:48