2011-04-04 76 views
66

如果我們有兩個活動:後退按鈕和清涼之前的活動

  1. 文件列表和最後修改時間
  2. 文件進行編輯活動

用戶從列表中選擇一個文件,是帶到文件編輯活動。編輯完成後,用戶按下後退按鈕返回文件列表。

該列表未重新載入,因此剛剛編輯的文件修改時間顯示的值不正確。

什麼是正確的方法導致文件列表刷新後按下後退按鈕?

這個例子假定沒有使用數據庫,只是一個ArrayAdapter。

+1

onRestart()應該更好地工作。 onResume()將被調用兩次,onRestart()僅在您按下後退按鈕時纔會調用。 – 2014-01-12 09:10:31

回答

7

我會建議重寫在活動編號1的onResume()方法,並在那裏包括代碼刷新陣列適配器,這是通過使用[yourListViewAdapater].notifyDataSetChanged();

閱讀這個,如果你有麻煩刷新列表完成:Android List view refresh

+0

這是正確的答案! – user2878850 2017-04-19 19:24:14

74

一個選擇是使用你的第一個活動的onResume。

@Override 
public void onResume() 
    { // After a pause OR at startup 
    super.onResume(); 
    //Refresh your stuff here 
    } 

或者你也可以對活動結果:

Intent i = new Intent(this, SecondActivity.class); 
startActivityForResult(i, 1); 

在secondActivity如果你想發回的數據:

Intent returnIntent = new Intent(); 
returnIntent.putExtra("result",result); 
setResult(RESULT_OK,returnIntent);  
finish(); 

,如果你不想返回數據:

Intent returnIntent = new Intent(); 
setResult(RESULT_CANCELED, returnIntent);   
finish(); 

現在在你的Fi rstActivity類寫下面的代碼onActivityResult()方法

​​
+2

'onResume()'像魔術一樣工作。謝謝:) – 2016-10-20 01:15:47

0

如果不處理從編輯活動的回調(與onActivityResult),那麼我寧願把你在onStart提到的邏輯(或可能在onRestart),由於具有它在onResume看起來似乎過度殺傷,因爲更改只發生在onStop之後。

無論如何,請熟悉the Activity lifecycle。另外,請注意onRestoreInstanceState和onSaveInstanceState方法,它們不會出現在漂亮的生命週期圖中。

(此外,這是值得檢討如何the Notepad Tutorial處理你在做什麼,儘管它使用一個數據庫。)

30

我認爲onRestart()適用於這更好。

@Override 
public void onRestart() { 
    super.onRestart(); 
    //When BACK BUTTON is pressed, the activity on the stack is restarted 
    //Do what you want on the refresh procedure here 
} 

你可以編寫你想要做什麼活動重新啓動時(從事件再次呼籲「後退按鈕按下」)內onRestart()。例如,如果您想在onCreate()中執行相同的操作,請將代碼粘貼到onRestart()中(例如,使用更新的值重新構建UI)。

+4

這很簡單,但我有話要說:顯然最好將onCreate()代碼移入一個單獨的方法,然後從onCreate()和onRestart()調用,而不是複製粘貼它。 – 2015-08-02 20:25:11

+0

你也可以使用onCreate()來膨脹視圖和實例化全局變量,並使用onStart()來分配/(重新)設置它們。因此,只要活動開始,你的init()(或任何你想調用它)都會被調用;即在onCreate()之後或onRestart()之後。 – jwehrle 2018-01-25 18:22:12

22

@Override 
public void onRestart() 
{ 
    super.onRestart(); 
    finish(); 
    startActivity(getIntent()); 
} 
+0

我猜這是去當前的活動,而不是以前的活動? – Si8 2016-10-29 13:33:14

+0

太好了,謝謝! – Benyamin 2017-11-01 10:11:37

-1

的認爲最好的辦法,以它使用

Intent i = new Intent(this.myActivity, SecondActivity.class); 
startActivityForResult(i, 1); 
+1

這已經在Waza_Be的答案中涵蓋了。 – runDOSrun 2015-02-20 12:27:03

0
private Cursor getAllFavorites() { 
    return mDb.query(DocsDsctnContract.DocsDsctnEntry.Description_Table_Name, 
      null, 
      null, 
      null, 
      null, 
      null, 
      DocsDsctnContract.DocsDsctnEntry.COLUMN_Timest); 
} 
@Override 
public void onResume() 
{ // After a pause OR at startup 
    super.onResume(); 
    mAdapter.swapCursor(getAllFavorites()); 
    mAdapter.notifyDataSetChanged(); 

} 

public void swapCursor(Cursor newCursor){ 
    if (mCursor!=null) mCursor.close(); 
    mCursor = newCursor; 
    if (newCursor != null){ 
     mAdapter.notifyDataSetChanged(); 
    } 
} 

我只是收藏類別所以當我點擊從收藏夾項目有出現這樣的信息,如果我不喜歡它 - 這個項目應該從收藏夾中刪除:爲了我刷新數據庫並將其設置爲適配器(用於recyclerview)[我希望你能理解我的問題&解決方案]

+0

考慮加入一些說明 – Gahan 2017-08-17 09:21:12

0

如果要刷新以前的活動,這個解決方案應該工作:

在以前的活動要刷新:

@Override 
public void onRestart() 
{ 
    super.onRestart(); 
    // do some stuff here 
}