2013-03-09 80 views
1

我的應用retruning從另一個活動後面的活動內容是信息應用程序,它具有執行收件箱功能的活性。因此,在我的收件箱中,我將在上面列出未讀郵件並在底部閱讀郵件。刷新在安卓

所以,如果我在一個未讀消息,點擊它會移動到其中顯示選擇的特定消息新的活動,在我的數據庫,我將其標記爲已讀。所以,在點擊後,當它移動到前一個活動時,這個消息應該在所讀取的消息之間顯示。但是,就我而言,它顯示的是舊情景,即該消息仍顯示在未讀消息之間。

我認爲活動應該被刷新,當它返回,所以我嘗試了一些令人耳目一新的方法,如:

1.

public void onResume(Bundle s) 
    { // After a pause OR at startup 
     super.onResume(); 
     this.onCreate(s); 
    } 

2.

Intent intent = new Intent(this, msgdisplayActivity.class); //msgdisplayActivity is activity which display the selected message. 
//intent.putExtra("someData", "Here is some data"); 
startActivityForResult(intent, 1); 

@Override 
protected void onActivityResult(int requestCode, int resultCode, Intent data) { 
    super.onActivityResult(requestCode, resultCode, data); 
    if(resultCode==RESULT_OK){ 
     Intent refresh = new Intent(this, inboxlist.class); //inboxlist is activity which list the read and unread messages 
     startActivity(refresh); 
     this.finish(); 
    } 
} 

但無論這個沒的「T。 onResume()未被調用,另一個顯示錯誤。 任何人都可以幫助我。 謝謝!

+0

你能否粘貼你的錯誤? – 2013-03-09 14:35:20

回答

-1

不同的設備處理的活性破壞不同。我發現的確切方法是將狀態保存到應用程序數據庫並檢索應用程序的焦點。

+0

雖然實際銷燬取決於可用內存,但生命週期是明確的。 OP在他的代碼片段中犯了一個可怕的錯誤,值得指出,但他沒有提到他有持久性問題。請確保你的回答與問題相關。 – 2013-03-09 14:39:02

0

你可以把你的刷新佈局代碼放在一個方法中

例如,

void populatedata() 
{ 
    //your code to show data in listview or lables 
    //if you are using listview, then you can write adapter.notifyDataSetChanged(); to refresh list 
} 

然後,你可以使用

Intent intent = new Intent(this, msgdisplayActivity.class); //msgdisplayActivity is activity which display the selected message. 
startActivityForResult(intent, 1); 

@Override 
protected void onActivityResult(int requestCode, int resultCode, Intent data) { 
super.onActivityResult(requestCode, resultCode, data); 
    if(resultCode==RESULT_OK){ 
    //call populatedatamethod 
    populatedata(); 
    } 
} 

您可以在onCreate方法使用同樣的方法。

能否請您提供您的onCreate和的onResume代碼?以便我可以根據您的代碼編輯我的答案?

的onResume也只是onActivityResult()之後調用,所以你也可以把你的代碼中有

+0

謝謝我的onActivityResult工作,但仍然onResume不工作。我在onResume函數中寫了一個toast來檢查它是否被調用。吐司沒有被顯示,這意味着它沒有被調用。你能幫我嗎? – Saans 2013-03-09 15:14:42

+0

你可以在一個常用的方法中添加代碼,並在onCreate和onActivityResult()方法中使用它,如我在這裏寫的,如果你有任何疑問,請在這裏粘貼onCreate和onResume代碼,這樣我就可以編寫完整的代碼 – 2013-03-09 15:30:38

0

onResume()方法不會被調用,因爲它的簽名。

它是使用@Override每當你打算重寫的方法是一個好主意。假如你在你的代碼中使用@Override,你會一直朝指出,你打算重寫,但沒有成功的問題。

從你的觀點來看1我建議你試着去理解活動的生命週期更好,因爲從內onResume()super.onResume()後調用super.onCreate()是,嗯,都是錯誤的。

你的第一個代碼段應該是這樣的:

@Override 
protected void onResume() { 
    super.onResume(); 
    // do what you need to do if your activity resumes 
} 

但是,你應該確保你瞭解什麼時候onResume()被調用。

關於您的onActivityResult()實施,它可能不是重新加載「收件箱」活動的最有效方法,但它應該有效。代碼看起來不錯,除了一個方面:在這種方法中,我不會呼叫super.onActivityResult(),因爲它不是必需的,它不能提供有意義的東西。我從來沒有這樣做,這工作正常。所以也許擺脫這個電話,看看錯誤是否仍然存在。

如果是,請發佈錯誤。