后退button并刷新以前的活动
如果我们有两个活动:
- 文件列表和上次修改时间
- 文件编辑活动
用户从列表中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);