后退button并刷新以前的活动

如果我们有两个活动:

  1. 文件列表和上次修改时间
  2. 文件编辑活动

用户从列表中select一个文件并将其带到文件编辑活动中。 编辑完成后,用户按下后退button返回文件列表。

该列表不重新加载,因此为刚刚编辑的文件修改时间显示一个不正确的值。

按下后退button后,什么是导致文件列表刷新的正确方法?

这个例子假定没有使用数据库,只是一个ArrayAdapter。

一个select是使用你的第一个活动的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(); 

现在在你的FirstActivity类中为onActivityResult()方法写下面的代码

 protected void onActivityResult(int requestCode, int resultCode, Intent data) { if (requestCode == 1) { if(resultCode == RESULT_OK){ //Update List } if (resultCode == RESULT_CANCELED) { //Do nothing? } } }//onActivityResult 

我认为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()里面重新启动Activity(再次按下事件button)调用你想要做的事情。

例如,如果您想要在onCreate()中做同样的事情,请将代码粘贴到onRestart()中(例如,使用更新后的值重新构buildUI)。

主要:

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

我build议覆盖活动编号1中的onResume()方法,并在其中包含用于刷新arrays适配器的代码,这是通过使用[yourListViewAdapater].notifyDataSetChanged();

如果刷新列表时遇到问题,请阅读以下内容: Android List view refresh

如果没有处理从编辑活动(与onActivityResult)的callback,那么我宁愿把你提到的逻辑onStart(或可能在onRestart),因为它在onResume似乎是矫枉过正,因为变化只发生在的onStop。

无论如何,熟悉Activity的生命周期 。 另外,请注意onRestoreInstanceState和onSaveInstanceState方法,这些方法不会出现在漂亮的生命周期图中。

(另外,值得回顾一下记事本教程如何处理你在做什么,虽然它确实使用了数据库。)

 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(); } } 

我只是最喜欢的类别,所以当我点击从collections夹的项目出现这样的信息,如果我不同意它 – 这个项目应该从collections夹删除:为了我刷新数据库,并将其设置为适配器(for recyclerview)[我希望你会理解我的问题和解决scheme]

思考最好的方法是使用

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