如何在不丢失数据的情况下返回我的父活动?

Posted

技术标签:

【中文标题】如何在不丢失数据的情况下返回我的父活动?【英文标题】:How to come back to my parent-activity without losing data? 【发布时间】:2018-10-09 03:28:20 【问题描述】:

我有一个带有“子活动”的activity A,即activity B。 当我创建一个活动时,就像在这种情况下在android中一样,我选择活动B,他的父母应该是活动A。

所以,当我启动我的应用程序时,我在活动 B 的 appbar 中有一个 icon,我可以在其中转到活动 A。

在我的例子中,用户例如edit-text 并在活动 A 中操作一些变量并使用 Intent 调用活动 B。

现在,在活动 B 中,当我单击“返回”图标时,我将返回到本例活动 A 的父活动,并且所有操作的数据都“离开”,因为屏幕将重新启动。

但是当我不点击活动B中的图标而是点击手机上的“返回”时,我会回到活动A并且所有被操纵的数据仍然存在。

所以我的问题是,有没有办法通过单击活动 B 中的后退图标返回活动 A,而不会重新启动屏幕。因为这个图标是自动添加的,所以当我说,哪个活动必须是父类。我想,我可以用这个图标返回,但不能重新启动屏幕,而是继续,我“最后”一次。

我向你展示我的活动 B 清单文件的一部分:

<activity
            android:name=".strassenfuehrer_screen.VideoPlayerHandlungsleitfadenStrassenfuehrerActivity"
            android:label="Straßenführer  >  Handlungsleitfaden  >  VideoPlayer"
            android:parentActivityName=".strassenfuehrer_screen.MitHandlungsleitfadenStrassenfuehrerScreenActivity">
            <meta-data
                android:name="android.support.PARENT_ACTIVITY"
                android:value="de.derdoenerdon.ressourcencockpit.strassenfuehrer_screen.MitHandlungsleitfadenStrassenfuehrerScreenActivity" />
        </activity>

这里可以看到Activity B中的“返回图标”。

如果需要帮助,我将非常感激,我是 android 新手,遇到困难。

非常感谢

【问题讨论】:

这看起来像是***.com/questions/4873263/…的副本 如果你从AstartActivity,不要完成它,当你从B回来时,你会得到你以前的数据。 什么意思?我的意思是,当我点击后退图标时,它会再次重新启动我的父级.. 或者你的意思是如何启动意图? 如果你切换 Activity 然后不要完成它,当你按下后,你会得到你留下的任何东西。 是的,但是我正在寻找一种方法来获取“此图标”,单击该图标并转到调用此活动的活动并使用该状态,就像您只需单击“返回”一样您的手机,也应实现,但有这个图标,将恢复活动 【参考方案1】:

在活动 A 的清单中添加此属性:

android:launchMode="singleTask"

这应该可以解决您的问题。

这样可以确保 BackStack 中只有一个 Activity A 实例。因此,每个 Task 只创建一次 Activity A。

希望这会有所帮助。

更多信息https://developer.android.com/guide/components/activities/tasks-and-back-stack

【讨论】:

谢谢,非常非常好。它帮助了我。但是如果活动A需要“返回”到活动“0”,然后再从活动0返回到活动A,所有这些“修改”都将丢失。为什么我可以从 B 移动到 A 而不会丢失修改?它很好,但如果我可以先到 0 再到 A 而不会丢失修改,那就完美了 您必须了解 android 中的“Tasks”和“BackStack”是如何工作的。简而言之,每当您启动应用程序时,都会创建一个“任务”,并且每个“任务”都有一个 BackStack。现在,无论何时启动一个活动,它都会被推送到堆栈中,而当您按下后退按钮(电话)时,它就会从堆栈中弹出。您尝试返回的任何其他方式都不会带您返回,而是启动前一个活动的新实例(这就是您丢失修改的原因,因为它是一个新实例)。为避免在“任务”中创建多个活动实例,您可以执行上述操作。 这确保只有一个活动实例保留在“任务”中,并且当您在代码中的任何位置调用该活动时,都会返回相同的实例(具有“修改”),因此您查看您的“修改”。为了更好地理解这一点,请访问我在答案中发布的链接。【参考方案2】:

您可以将onSaveInstanceState() 覆盖到您的Activity 中,并在离开Activity 之前保存您的数据。

@Override
public void onSaveInstanceState(Bundle savedInstanceState) 
    savedInstanceState.putInt("KEY1", Value1);
    savedInstanceState.putInt("KEY2", Value2);

    // Always call the superclass so it can save the view hierarchy state
    super.onSaveInstanceState(savedInstanceState);

返回该活动后,您可以将保存的数据作为捆绑包获取到onCreate() 方法中。

@Override
protected void onCreate(Bundle savedInstanceState) 
    super.onCreate(savedInstanceState); // Always call the superclass first
    if (savedInstanceState != null) 
        // Restore value of members from saved state
        int val1 = savedInstanceState.getInt("Key1");
        int val2 = savedInstanceState.getInt("Key2");
     else 
        // This is the case when you are openning this Activity for the for the first time
    

【讨论】:

但是你认为有没有一种方法可以找到“选定项目”图标,而不是启动新屏幕,而是恢复停止的屏幕? @JosipaAllen 你可以使用Android提供的SharedPreference 不,我的意思是,当我点击图标时,屏幕将再次启动,我所做的所有状态都消失了。但是,如果我实现所选项目的行为,在这种图标的情况下,如果我发现,如果点击了图标,我只想“恢复”这个称为新活动的活动。这在我点击手机上的“返回”时有效,但在我点击图标时无效,这就是为什么我问,也许有办法,用这个图标做同样的行为

以上是关于如何在不丢失数据的情况下返回我的父活动?的主要内容,如果未能解决你的问题,请参考以下文章

Spring JPA:如何在不丢失数据的情况下进行更新插入

如何在不打开的情况下将数据发送到另一个活动

如何在不丢失当前页面的情况下重绘数据表

如何在不参考 BigQuery 中的父记录的情况下查询嵌套记录中的字段?

如何在不丢失 exif 数据的情况下将 UIImage 转换为 JPEG?

如何在不丢失 Xampp 中的数据的情况下将类型从 varchar 更改为 Date