单击后退按钮时调用onrestart / onresume

时间:2011-12-04 21:51:43

标签: android

晚上,

我正面临一个小问题,我无法修复。我有一个“基础”活动(名称: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方法?

1 个答案:

答案 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();
}

}

希望这有助于多一点:)