如何在不丢失数据的情况下返回先前打开的活动

时间:2016-11-29 16:10:59

标签: android android-activity

我有像这样的开放活动

活动-A(获取用户个人详细信息) - >

活动-B(获取用户联系信息) - >

活动-C(获取用户信用卡详细信息) - >

活动-D(信用卡验证)

现在从Activity-D开始,我需要移动到Activity-B,而不会丢失用户在Activity-B上输入的数据

我在Activity-D上尝试了finish() menthod但它失败了。

我已使用以下方法打开所有活动。从Activtiy-A到Activty-B的例子

 Intent intent_B = new Intent(getApplicationContext(), ActivityB.class)
startActivity(intent_B);

如何从Activity-D

恢复活动-B

4 个答案:

答案 0 :(得分:1)

  1. 将活动B的所有必需数据存储/恢复为savedInstanceState

  2. 使用Intent.FLAG_ACTIVITY_CLEAR_TOP

  3. 从活动D开始活动B.

    这会导致您完全需要的行为:

    • 活动C& D从backstack中清除
    • 以前创建的活动B已打开
    • 用户可以通过单击后退按钮
    • 从活动D返回活动C.
    • 此外,我们还会阻止数据丢失,以防系统从内存中删除不可见活动

答案 1 :(得分:1)

解决问题的简单方法。

在导航到活动D之前,您应该致电finish()

Intent intent_D = new Intent(getApplicationContext(), ActivityD.class)
startActivity(intent_D);
finish();

这将完成活动C,活动A和B仍然在后台。因此,当您单击Backpress或在活动D上调用finish()时,您将在活动B上导航,您的数据将无需任何额外工作即可使用。

答案 2 :(得分:0)

最好的方法是使用static个变量或Singleton类。请在此处找到单身人士: link

至于静态变量,请看这里: link

答案 3 :(得分:-1)

这里

在活动1 ::

Get-Content

在活动2 ::

完成该活动的任务后。

只需

int REQ_INT=888;
Intent intent_B = new Intent(getApplicationContext(), ActivityB.class)
startActivityForResult(intent_B,REQ_INT);
 @Override
    protected void onActivityResult(int requestCode, int resultCode, Intent data) {
        super.onActivityResult(requestCode, resultCode, data);
        if (resultCode == RESULT_OK)
            switch (requestCode) {
                case REQ_INT: 
                 //DO your stuff here after getting in this activity again..
                 break;
            }
    }

您可以通过意图将数据传递给该活动。

或者查看这些链接Link1 Link 2