gpt4 book ai didi

Android Activity 导航保存状态

转载 作者:塔克拉玛干 更新时间:2023-11-03 00:04:34 25 4
gpt4 key购买 nike

在主要 Activity ActivityA 中,我将 FragmentA 替换为 fragment FragmentB。从 FragmentB 中,用户可以开始一个新的 Activity ActivityB。通过点击 ActivityB 中的后退按钮,显示 ActivityA 并显示 FragmentA。我期待看到 FragmentB 的最后状态。我是否必须单独保存以前 Activity 的状态才能提供此行为?

ActivityA(FragmentA) -> ActivityA(FragmentB) -> ActivityB 
BACK
ActivityA(FragmentB)

在主要 Activity 中,我使用以下方法设置当前 fragment :

FragmentManager fragmentManager = getFragmentManager();
fragmentManager.beginTransaction()
.replace(R.id.a_main_frame_content, new FragmentB())
.addToBackStack(null)
.commit();

我从 fragment 开始一个新 Activity ,使用:

Intent intent = new Intent(getActivity(), ActivityB.class);
getActivity().startActivity(intent);

ActivityA 被设置为 ActivityB 的父 Activity 以提供正确的导航。

[UPDTATE] 看起来问题在于向后导航和向上导航的不同行为。如果我向后导航, Activity 将以其最后状态显示,而向上导航会强制重新创建 Activity 。

最佳答案

让我们试试这个:

在parentActivity的intent中(如果你能在创建parentActivity之前设置它最好,否则你可能不得不使用setIntent):

    currentActivityIntent.putExtra("random-unique-key-for-each-activity",
random-unique-key-for-each-activity);

在您创建子 Activity 之前,您将以下内容放入 map 中:

myKeyIntentMap.put(random-unique-key-for-each-activity, currentActivityIntent);

在“向上”事件触发的方法中:

{
String parentKey = currentActivity.parentActivity.getIntent.getStringExtra("random-unique-key-for-each-activity");
Intent intentToLaunch = (Intent)myKeyIntentMap.get(parentKey);
intentToLaunch.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP|Intent.FLAG_ACTIVITY_SINGLE_TOP );
startActivity(intentToLaunch);
}

这样,使用 Intent ,即使您的历史堆栈是 A-someAct1-someAct2-B,并且您启动解析为 A 的 Intent ,它也会被“带到前面”杀死 someActs。

附言我没有做任何空检查,也没有记住确切的方法名称,只是给了你一个方法。

关于Android Activity 导航保存状态,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21478715/

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