单击后退按钮时,活动组不会刷新活动

时间:2011-04-20 07:07:51

标签: android refresh activitygroup

我的应用程序上有一个tabhost,我正在使用一个Activity组来处理里面的3个活动。

实施例: ActivityGroup句柄  A - > B - > ç

当我开始这项活动时,我正在使用标志Intent.FLAG_ACTIVITY_CLEAR_TOP。

我的问题是当用户从A-> B-> C开始并按回按钮时,我的B活动显示,但它没有恢复或重新加载或刷新。它与以前的状态相同。

例如,如果用户再次进入C,则刷新C,但是当C从C返回时...... B不是。

在B上我实现了诸如onResume,onStart,onReestart等方法并调试它,主线程永远不会进入...

我需要刷新B,因为C可以进行更改以更改B上显示的内容。

我已将谷歌搜索了3天,但我找不到解决方案..

5 个答案:

答案 0 :(得分:2)

我也有这个问题。

我使用的是基于this blog post的ActivityGroup代码。

当我按下后退按钮时,前一个View会加载正常,但与之关联的活动不会触发onResume()

我在覆盖和公开onResume()上使用了扩展活动。

我找到this blog post,因此尝试将视图转换为我的扩展活动并调用onResume()

宾果

编辑....这里有更多细节...

public class YFIMenuListActivity extends ListActivity {
....
  @Override
  public void onResume() {
    super.onResume();
  }
....
}

onResume()通常受到保护,但我覆盖它并将其公开,以便我的ActivityGroup可以调用它。 我在这个活动组中只有扩展列表活动(我只是玩游戏)。如果您有不同的活动,则每个活动都必须覆盖onResume(),我猜您必须在投射和调用它之前查看从v.getContext()返回的上下文类型。

我的ActivityGroup看起来像这样:

public class BrowseGroup extends ActivityGroup {
.....
  @Override
  protected void onResume() {
    super.onResume();
    // call current activity's onResume()
    View v = history.get(history.size()-1);
    YFIMenuListActivity currentActivity = (YFIMenuListActivity)v.getContext();
    currentActivity.onResume();
  }
....
}

答案 1 :(得分:1)

我设法实现了cousin_itt方法的扩展版本。

在我在活动组中使用的两个活动中,我更改了来自:

的Resume
protected void onResume()

public void onResume()

然后我在ActivityGroup中编写了以下onResume函数来手动触发onResumes:

@Override
protected void onResume() { 
super.onResume();
View v = history.get(history.size()-1);

MainPeopleView currentActivity = null;   

try {
    currentActivity = (MainPeopleView)v.getContext();
    currentActivity.onResume();
}
catch ( ClassCastException e ) {
    Log.e(TAG, e.toString());
}

ProfileView otherActivity = null;

try {
otherActivity = (ProfileView)v.getContext();
otherActivity.onResume();
}
catch ( ClassCastException e ) {
    Log.e(TAG, e.toString());
}
}

我不得不说,这感觉就像我写过的最糟糕的机器人黑客。我再也不会使用activitygroup了。

答案 2 :(得分:1)

((ReportActivity)getLocalActivityManager().getActivity("ReportActivity")).onResume();

ReportActivity是您要返回活动的名称     ps:v.getContext();

只返回ActivityGroup,它无法调用子Activity onResume

答案 3 :(得分:0)

我希望您已使用此方法onResume()编写了刷新数据代码。

答案 4 :(得分:0)

我发现onFocusChanged(boolean hasFocus)非常适合像ActivityGroup这样的情况。即使onResume()没有,这也会触发。我将它用于我的一些具有TabHostActivityGroup s的应用。在这里,您可以强制刷新并确保在Activity重新获得焦点时始终触发。