0

我阅读了很多关于这个主题的主题,但我找不到任何适合我需要的东西。

我有一个包含 3 个活动的应用程序(在这里我将它们称为屏幕,更直观):A(MainActivity)、B 和 C。
屏幕 A 启动另一个进程,从该进程中检索一些信息并根据答案设置布局。然后它让你有机会做某事(写一篇文章)。这是在 OnCreate() 上完成的。

屏幕 B 不是很有趣(显示文本并允许您对其进行编辑)。

屏幕 C 有一个退出应用程序的按钮(基本上是启动 home 活动)。C 还关闭了我们在 A 上启动的进程(在向它传达了一些信息之后)。

到目前为止,一切都很好。问题是当我重新启动我的应用程序时,我再次看到屏幕 C。这对我不利,因为我希望用户能够编辑文本,而不必返回第一个或第二个屏幕(不是因为它很难,而是因为我需要他看到呈现在在他做任何事情之前屏幕 A。而这不能在 C 之后完成,因为在 C 之后他完成了,除非他决定重新启动应用程序)。
这意味着当我到达屏幕 C 并按下按钮时,我的应用程序已完成,我在那里无事可做(但要重新开始)。但是,如果我的应用程序在屏幕 B 上暂停,则无需重新开始 - 我可以回到它并从那里继续(常规的 Android 行为)。

所以我设置android:clearTaskOnLaunch="true"了,但现在我有两个问题:
1. 即使应用程序在 B 上暂停,它现在又重新开始(有点,见 #2),这不是我需要的。
2. 它并没有真正重新开始......是的,我看到了屏幕 A。但是我在 OnCreate() 上所做的所有事情都没有再次完成,这意味着我的其他进程没有启动并运行,然后我的应用程序崩溃了,因为我没有人可以说话......

这种情况有什么解决办法吗?只有在应用程序的上一次运行完成之后(我们按下屏幕 C 上的单个按钮并返回主屏幕),我才需要重新开始(但真的很新鲜,我在 OnCreate() 上所做的所有事情都会再次完成)。在任何其他暂停情况下(如果我们还没有按下按钮,在 A、B 甚至 C 中)我想要正常的 Android 行为(即返回到同一屏幕)。

任何帮助都感激不尽。

4

2 回答 2

0

要解决这个问题,您可以利用 Android 活动生命周期:http: //developer.android.com/training/basics/activity-lifecycle/stopping.html

只需在应用程序关闭时适当地调用 Activity B 中的 finish() 和 onStop() 或 onPause() 中的 C 来擦除这些活动(或您所说的“屏幕”)。当您打开应用程序备份时,活动 A 应该重新打开并保持最后一个状态。

如果您也希望清除 Activity A 中的最后一个状态,那么在适当的地方添加一个 finish() 调用(可能根据您的用例再次 onStop 或 onPause)

祝你好运!

于 2014-08-17T16:59:12.240 回答
0

我之前有一个类似的应用程序,一个调查应用程序,并且遇到了同样的情况。A->B->C,一旦你完成C,你就直接去A,不能回去,但你可以从B->A回去。这是我所做的:

1)在启动 B Activity 时将其添加到 A Activity:

        Intent start;
    start = new Intent(MainActivity.this, RecordName.class);
    startActivityForResult(start, 2);

以及您的 A 活动中的此方法:

protected void onActivityResult(int requestCode, int resultCode, Intent data) {
      if (requestCode == 2) {
         if(resultCode == RESULT_OK){      
             //String result=data.getStringExtra("result");
             finish();
         }
      }

2) 在 B Activity 中添加这个当你启动 C Activity: Intent start; start = new Intent(B.this, C.class); startActivityForResult(start,1);

这又在你的 B 活动中:

protected void onActivityResult(int requestCode, int resultCode, Intent data) {
      if (requestCode == 1) {
         if(resultCode == RESULT_OK){      
             //String result=data.getStringExtra("result");
             finish();
         }
      }

3)在您的 C 活动中,将其添加到您的 press 方法中:

        Intent start;
        start = new Intent(C.this,A.class);
        // pass any data back to A activity 
        start.putExtra("Key", String);
        startActivity(start);
        // to close previous activities 
        Intent returnIntent = new Intent();
        //returnIntent.putExtra("result","finish");
        setResult(RESULT_OK,returnIntent);     
        // close current activity
        finish();

我希望这有帮助

于 2014-08-17T17:58:23.047 回答