如果我們有兩個活動:後退按鈕和清涼之前的活動
- 文件列表和最後修改時間
- 文件進行編輯活動
用戶從列表中選擇一個文件,是帶到文件編輯活動。編輯完成後,用戶按下後退按鈕返回文件列表。
該列表未重新載入,因此剛剛編輯的文件修改時間顯示的值不正確。
什麼是正確的方法導致文件列表刷新後按下後退按鈕?
這個例子假定沒有使用數據庫,只是一個ArrayAdapter。
如果我們有兩個活動:後退按鈕和清涼之前的活動
用戶從列表中選擇一個文件,是帶到文件編輯活動。編輯完成後,用戶按下後退按鈕返回文件列表。
該列表未重新載入,因此剛剛編輯的文件修改時間顯示的值不正確。
什麼是正確的方法導致文件列表刷新後按下後退按鈕?
這個例子假定沒有使用數據庫,只是一個ArrayAdapter。
我會建議重寫在活動編號1的onResume()
方法,並在那裏包括代碼刷新陣列適配器,這是通過使用[yourListViewAdapater].notifyDataSetChanged();
閱讀這個,如果你有麻煩刷新列表完成:Android List view refresh
這是正確的答案! – user2878850 2017-04-19 19:24:14
一個選擇是使用你的第一個活動的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()
方法
'onResume()'像魔術一樣工作。謝謝:) – 2016-10-20 01:15:47
如果不處理從編輯活動的回調(與onActivityResult),那麼我寧願把你在onStart提到的邏輯(或可能在onRestart),由於具有它在onResume看起來似乎過度殺傷,因爲更改只發生在onStop之後。
無論如何,請熟悉the Activity lifecycle。另外,請注意onRestoreInstanceState和onSaveInstanceState方法,它們不會出現在漂亮的生命週期圖中。
(此外,這是值得檢討如何the Notepad Tutorial處理你在做什麼,儘管它使用一個數據庫。)
我認爲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)。
這很簡單,但我有話要說:顯然最好將onCreate()代碼移入一個單獨的方法,然後從onCreate()和onRestart()調用,而不是複製粘貼它。 – 2015-08-02 20:25:11
你也可以使用onCreate()來膨脹視圖和實例化全局變量,並使用onStart()來分配/(重新)設置它們。因此,只要活動開始,你的init()(或任何你想調用它)都會被調用;即在onCreate()之後或onRestart()之後。 – jwehrle 2018-01-25 18:22:12
的認爲最好的辦法,以它使用
Intent i = new Intent(this.myActivity, SecondActivity.class);
startActivityForResult(i, 1);
這已經在Waza_Be的答案中涵蓋了。 – runDOSrun 2015-02-20 12:27:03
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)[我希望你能理解我的問題&解決方案]
考慮加入一些說明 – Gahan 2017-08-17 09:21:12
如果要刷新以前的活動,這個解決方案應該工作:
在以前的活動要刷新:
@Override
public void onRestart()
{
super.onRestart();
// do some stuff here
}
onRestart()應該更好地工作。 onResume()將被調用兩次,onRestart()僅在您按下後退按鈕時纔會調用。 – 2014-01-12 09:10:31