2011-07-27 36 views
7

我不能为我的生活弄清楚如何有按后退按钮后的活动进行刷新。我现在有活动A,它激发了转向B的意图,而在行为B时,如果你按回来,我想回到行动A但是让它自行更新。我可以用这个意图目前刷新活动:使用的onResume()来刷新活动

Intent refresh = new Intent(this, Favorites.class); 
    startActivity(refresh); 
    this.finish(); 

但我无法弄清楚如何正确使用的onResume()函数来刷新我的行为一回去之后。

+1

您当前的刷新计划运作可能的原因是因为你正在运行在标准launchMode活动。这意味着,由于每一个新的实例经过的onCreate(startActivity(刷新)的每次调用生成活性A的新实例),创建这些不必要的情况下,给人耳目一新的活动的出现。为了正确地做到这一点,你真的应该确定的onCreate(代码),负责“清凉”活动,并将其移动到的onResume(),如奥维迪乌以下建议。 – glorifiedHacker

回答

10

如果从ActivityB回来时需要的ActivityA一个特殊的行为,你应该使用startActivityForResult(Intent intent, int requestCode)而不是startActivity(Intent intent)

startActivityForResult(new Intent(this, ActivityB.class), REQUEST_CODE); 

这样一来,你就可以通过重载onActivityResult(int requestCode, int resultCode, Intent intent)检测ActivityAActivityB终止:

@Override 
protected void onActivityResult(int requestCode, int resultCode, Intent intent) { 
    super.onActivityResult(requestCode, resultCode, intent); 

    if (requestCode == REQUEST_CODE) { 
     doRefresh(); // your "refresh" code 
    } 
} 

这甚至如果通过后退按钮的按下终止ActivityB工作。在这种情况下,resultCode默认为RESULT_CANCELLED

1

你需要的地方,更新你的活动在onResume()方法的UI代码。也许你应该发布更多的代码或解释你到底想要更新什么。

+0

我有一个活动,包含从我的数据库检索5个字符串的列表视图。它使用BackService方法运行,即如果数据库发生变化,我将使用字符串获取新的通知。如果我点击那个通知,listview也应该包含该字符串。 OnResume()会允许我这么做吗? – suraj

3

使用startActivityForResult(intent, requestCode);Activity A

开始Activity B然后在Activity A覆盖onActivityResult(int requestCode, int resultCode, Intent data)

那里你可以刷新Activity A