后退按钮和清凉之前的活动
如果我们有两个活动:后退按钮和清凉之前的活动
- 文件列表和最后修改时间
- 文件进行编辑活动
用户从列表中选择一个文件,是带到文件编辑活动。编辑完成后,用户按下后退按钮返回文件列表。
该列表未重新载入,因此刚刚编辑的文件修改时间显示的值不正确。
什么是正确的方法导致文件列表刷新后按下后退按钮?
这个例子假定没有使用数据库,只是一个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