后退按钮和清凉之前的活动

问题描述:

如果我们有两个活动:后退按钮和清凉之前的活动

  1. 文件列表和最后修改时间
  2. 文件进行编辑活动

用户从列表中选择一个文件,是带到文件编辑活动。编辑完成后,用户按下后退按钮返回文件列表。

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

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

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

+1

onRestart()应该更好地工作。 onResume()将被调用两次,onRestart()仅在您按下后退按钮时才会调用。 – 2014-01-12 09:10:31

我会建议重写在活动编号1的onResume()方法,并在那里包括代码刷新阵列适配器,这是通过使用[yourListViewAdapater].notifyDataSetChanged();

阅读这个,如果你有麻烦刷新列表完成:Android List view refresh

+0

这是正确的答案! – 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()方法

​​
+2

'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)。

+4

这很简单,但我有话要说:显然最好将onCreate()代码移入一个单独的方法,然后从onCreate()和onRestart()调用,而不是复制粘贴它。 – 2015-08-02 20:25:11

+0

你也可以使用onCreate()来膨胀视图和实例化全局变量,并使用onStart()来分配/(重新)设置它们。因此,只要活动开始,你的init()(或任何你想调用它)都会被调用;即在onCreate()之后或onRestart()之后。 – jwehrle 2018-01-25 18:22:12

@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

的认为最好的办法,以它使用

Intent i = new Intent(this.myActivity, SecondActivity.class); 
startActivityForResult(i, 1); 
+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)[我希望你能理解我的问题&解决方案]

+0

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

如果要刷新以前的活动,这个解决方案应该工作:

在以前的活动要刷新:

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