gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-11-29 15:29:28 24 4
gpt4 key购买 nike

晚上,

我遇到了一个无法解决的小问题。我有一个“基本” Activity (名称:TestActivity,扩展 ActivityGroup),其中包含一个历史数组列表。每次我要进行新 Activity 时,我都会使用以下位来加载新 View 。

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 方法来“替换” View 。代码见下:

public void replaceView(View v)
{
history.add(v);
setContentView(v);
}

在每个 Activity 中,我都会覆盖 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();
}
}

现在出现了问题:当我使用手机上的后退按钮并且之前的 Activity 出现在前台时, View ( Activity )中不会调用任何内容。当我遵循 Activity 生命周期时,我认为 onResume 将被调用,但事实并非如此。没有任何反应。

所以问题是:如何在按下后退按钮时调用 onResume 方法?

最佳答案

@Commonsware 友善地指出(在我的另一篇文章中)ActivityGroups 实际上已被弃用。相反,我们应该转向 Fragments。

我和你一样与同样的问题作斗争的时间比我愿意承认的要长。当您在按下后退按钮后将焦点从 ActivityGroup 中的 View 返回到 View 时,常用工具(OnResume、OnRestart)都不起作用。

不幸的是,我仍然需要找到一种方法来在按下后退按钮后从 ActivityGroup 中伪造 onResume(因为我对使用 ActivityGroups 的遗留代码投入了大量资金。)在我挣扎。

希望这对您有所帮助。

-- 编辑--

我找到了一种方法:

不是保留 View 的历史记录,而是保留您开始的 Activity 的 ID 的历史记录。您开始的每个 Activity 都有一个与之关联的唯一 ID。因此,当您调用 back() 时,检索 Activity 的 ID,并重新启动 Activity 。这将根据需要触发 Activity 的“onResume()”方法。

以下是我将如何重构您提供的代码:以下位加载新 View :

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()”方法中替换 View :

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

}

希望这对您有所帮助 :)

关于android - 单击后退按钮时调用 onrestart/onresume,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8378867/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com