2013-02-01 39 views
0

在我的主要活動中,我想覆蓋onResume方法,因此它的行爲有所不同,具體取決於之前打開的活動。 例如:如果用戶爲listView(在addNewItem活動中)創建一個新項目,我需要重新加載數據庫以顯示newItem。 但是,如果他只切換到一個活動,它不會改變主活動中顯示的對象的任何內容,則不應該重新加載數據庫,並且不應該再次構建GUI。爲此,我需要知道哪些活動是「打開」過的。如何確定哪些活動在onResume中被打開

我希望你能理解我的問題。

+0

你的設計是錯誤的。您絕不應僅僅依靠導航來重新加載消費者中的數據。更改數據的類應通知消費者,而不必關心它的重新加載。你會在這裏寫一個「kludge」。請參閱notifyDataSetChanged。 http://adblogcat.com/sqlite-database/。在一個好的設計中,無論用戶打開哪個Activity然後關閉,您的主要活動都會正確運行。不需要糟糕的代碼。 – Simon

回答

0

一個骯髒的方法是擴展您的應用程序類並設置屬性lastActivity,您可以在應用程序中的每個活動的每個onResume/OnPause方法中設置該屬性。這樣,當您的簡歷主要活動被調用時,只需閱讀lastActivity字段即可知道您來自哪裏。但我認爲這是骯髒的方式來做到這一點:D

+0

是的,它的:D如果我找不到更好的方法,我只是加載everthing再次在每個方法調用中構建新的^^ – telina

+0

很高興你解決了你的問題:)然後你能驗證我的答案嗎? – psykhi

0

當您致電活動時,您可以通過您的意圖發送一些東西。

Intent myIntent = new Intent(Activity1.this,Activity2.class); 
Bundle myData = new Bundle(); 
myData.putString("previousActivity", "Activity1"); 
myIntent.putExtras(myData); 
startActivity(myIntent); 

然後在新的活動,您訪問本和比較的結果:

Intent myLocalIntent = getIntent(); 
Bundle myBundle = myLocalIntent.getExtras(); 
String str1 = myBundle.getString("previousActivity"); 
if string.equals("Activity1"){ 
    // do code changes for activity 1 here 
} 

有這樣做(即通過一個int變量,它對應於特定活動的略微更加細化的方式)但這是最基本的方式。

+0

但我認爲如果用戶只是在另一個活動中按下後退按鈕,它不會工作,是嗎? – psykhi

+0

這就是我的問題,我只能找到使用Intents改變Activity的解決方案..但是我不能使用onPause()和onResume()的自動調用的Intent,我可以嗎? – telina

+0

然後@ psykhi的答案是這樣做的 - 一個單獨的類,每一個活動必須調用每次他們加載,你可以檢查在Resume –

0

正確的做法是,開始每個活動與startActivityForResult(intent, resultCode)

當活動退出時,它可以調用setResult(int)將數據返回給其父級。

Link to Developers Resource

相關問題