我有一个 ActivityGroup,它在一个 Tab 中有 4 个 Activity。
A1->A2->A3->A4
假设我从上一个 Activity 正在重新启动的任何 Activity 中按回。当我调用一个新的 Activity 时,我的要求应该是重新开始。当我按下后退按钮时,必须恢复之前的 Activity (无需重新启动)。
请帮我解决这个问题。我缺乏设置适当的 Intent 标志。我的代码是这样的。
public void startChildActivity(String Id, Intent intent) {
Window window;
Log.e("startChildActivity","startChildActivity");
window = getLocalActivityManager().startActivity(Id,intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP));
if (window != null)
{
mIdList.add(Id);
setContentView(window.getDecorView());
}
}
public void finishFromChild(Activity child)
{
restartFlag=true;
Log.e("finishFromChild","finishFromChild");
LocalActivityManager manager = getLocalActivityManager();
int index = mIdList.size()-1;
if (index < 1) {
finish();
return;
}
manager.destroyActivity(mIdList.get(index), true);
mIdList.remove(index);
index--;
String lastId = mIdList.get(index);
Intent lastIntent = manager.getActivity(lastId).getIntent();
Window newWindow = manager.startActivity(lastId, lastIntent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP));
setContentView(newWindow.getDecorView());
}
最佳答案
您好,我终于找到了解决方案。其实罪魁祸首是
manager.destroyActivity(mIdList.get(index), true);
在代码中。
Android destroyActivity() 函数实现中存在错误。
问题的确切根源在于 LocalActivityManager.java 中的以下代码块:
public Window destroyActivity(String id, boolean finish) {
LocalActivityRecord r = mActivities.get(id);
Window win = null;
if (r != null) {
win = performDestroy(r, finish);
if (finish) {
mActivities.remove(r);
}
}
return win;
}
变量 mActivities 是包含 Activity 记录的 HashMap ,它使用传递给 startActivity() 的 id 作为键。在此方法中,为键传入的对象是 LocalActivityRecord 而不是 id 字符串。这会导致 HashMap 找不到该条目,因此不会将其删除。
更多信息请引用此链接。 http://code.google.com/p/android/issues/detail?id=879More
关于android - ActivityGroup中,如何恢复之前的activity(不重启),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6330029/