晚上,
我正面临一个小问题,我无法修复。我有一个“基础”活动(名称:TestActivity
,扩展ActivityGroup
),其中包含历史数组列表。每当我要进行一项新活动时,我都会使用以下位来加载新视图。
Intent intent = new Intent(Start.this, CitySelect.class);
View view = TestActivity.group.getLocalActivityManager().startActivity("cityselect", intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP)).getDecorView();
TestActivity.group.replaceView(view);
正如您所看到的,我正在调用replaceView
方法来“替换”视图。请参阅下面的代码:
public void replaceView(View v)
{
history.add(v);
setContentView(v);
}
在每项活动中,我都会覆盖onBackPressed
:
@Override
public void onBackPressed()
{
TestActivity.group.back();
}
请参阅下面的back
方法:
public void back()
{
if (history.size() > 0)
{
history.remove(history.size() - 1);
if (history.size() > 0)
{
View v = history.get(history.size() - 1);
setContentView(v);
}
else
{
finish();
}
}
else
{
finish();
}
}
现在出现了问题:当我在手机上使用后退按钮并且前一个活动到达前台时,视图(活动)中将不会调用任何内容。当我关注活动生活时,我认为onResume
会被调用,但事实并非如此。没有任何事情发生。
所以问题是:当我按下后退按钮时,如何调用onResume
方法?
答案 0 :(得分:5)
@Commonsware特别指出(在我的另一篇文章中)ActivityGroups实际上已被弃用。我们应该转而使用片段。
与你争论的问题比我承认的更长。在按下后退按钮后,将焦点返回到ActivityGroup中的视图时,所有常用工具(OnResume,OnRestart)都不起作用。
不幸的是,当按下后退按钮后,在ActivityGroup中的from(因为我大量投入使用ActivityGroups的遗留代码)时,我仍然需要找到一种伪造 onResume的方法。在我挣扎。
希望这有帮助。
- 编辑 -
我找到了一种方法:
不要保留视图的历史记录,而是保留您开始的活动的id的历史记录。您启动的每项活动都有一个与之关联的唯一ID。因此,当您回调()时,检索活动的ID,然后重新开始活动。这将根据您的需要触发您的活动的“onResume()”方法。
以下是重构您提供的代码的方法: 跟随位加载新视图:
Intent intent = new Intent(Start.this, CitySelect.class);
View view = TestActivity.group.getLocalActivityManager().startActivity("cityselect", intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP)).getDecorView();
TestActivity.group.replaceView(view,"cityselect");
替换“replaceView()”方法中的视图:
public void replaceView(View v, String activityId)
{
history.add(activityId);
setContentView(v);
}
最后,来自ActivityGroup中的back()方法:
public void back()
{
if (history.size() > 0)
{
history.remove(history.size() - 1);
if (history.size() > 0)
{
//View v = history.get(history.size() - 1);
//setContentView(v);
LocalActivityManager manager = getLocalActivityManager();
String lastId = mIdList.get(history.size()-1);
Intent lastIntent = manager.getActivity(lastId).getIntent();
Window newWindow = manager.startActivity(lastId, lastIntent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP));
setContentView(newWindow.getDecorView());
}
else
{
finish();
}
}
else
{
finish();
}
}
希望这有助于多一点:)