0

我正在为我们用 3 个按钮编写的活动编写活动测试。其中 2 个按钮启动其他活动。

我可以编写一个模拟按钮按下的测试,然后检查所需的活动是否正在运行,但我无法从第二个活动返回。第二个活动保持在最前面并阻止假设第一个活动正在运行的其他测试正常工作。他们只是有点冻结。

我有对第一个活动的引用,但这是我需要调用 finish() 的第二个活动。有没有办法做到这一点?

编辑:我在这个要点中添加了一些实际的源代码来说明我的问题:https ://gist.github.com/3076103

它专门针对测试活动。在生产代码中一切都很好。

4

4 回答 4

2

您可能应该使用http://developer.android.com/reference/android/app/Instrumentation.ActivityMonitor.html来获取第二个活动的参考,或者您可以阻止第二个活动的启动(仍然可以保证调用启动第二个活动实际上已经到达框架)。

于 2012-07-12T19:12:20.147 回答
0

您需要一种方式让您的活动相互交流,以便一个活动可以告诉另一个活动完成。有几种方法可以做到这一点。一种方法是在我的应用程序中创建服务;我的“第二个”活动将连接到此服务以注册一种接收消息的方式,而我的主要活动将连接以提供它们。

于 2012-07-09T11:03:40.243 回答
0

在 Activity1 中添加以下内容以启动 Activity2

Intent myIntent = new Intent(view.getContext(), Activity2.class);
startActivityForResult(myIntent, 0);

在 Activity2 添加以下内容以启动 Activity1 并完成 Activity2

Intent intent = new Intent();
setResult(RESULT_OK, intent);
finish();

更多详情:http ://www.warriorpoint.com/blog/2009/05/24/android-how-to-switch-between-activities/

于 2012-07-09T11:15:28.820 回答
0
  • 如果您使用 startActivityForResult 启动活动,则可以使用finishActivity(int requestCode)从父项关闭活动。

    开始活动:
    startActivityForResult(new Intent(...), 123123 /*requestCode*/);

    当您想完成该活动(来自呼叫者)时,请使用:
    finishActivity(123123 /*requestCode*/)

  • 还有一种方法可以查找子活动是否完成。但是只有当子活动为自己调用完成()时,您才能跟踪这一点。要从子节点接收子节点完成请求,您需要覆盖父活动中的finishFromChild()方法。

于 2012-07-12T15:32:00.397 回答