0

3 つのボタンで作成したアクティビティのアクティビティ テストを作成しています。これらのボタンのうち 2 つは、他のアクティビティを開始します。

ボタンのプッシュをシミュレートし、目的のアクティビティが実行されているかどうかを確認するテストを作成できますが、その 2 番目のアクティビティから戻ることはできません。2 番目のアクティビティは最前線に留まり、最初のアクティビティが実行されていることを前提とする他のテストが適切に機能しないようにします。彼らはちょっとフリーズします。

最初のアクティビティへの参照がありますが、finish() を呼び出す必要があるのは 2 番目のアクティビティです。これを行う方法はありますか?

編集:この要点で私の問題を示す実際のソースコードをいくつか追加しました: https://gist.github.com/3076103

それは特にテスト活動に関するものです。プロダクションコードでは、すべて問題ありません。

4

4 に答える 4

2

おそらくhttp://developer.android.com/reference/android/app/Instrumentation.ActivityMonitor.htmlを使用して 2 番目のアクティビティの参照を取得するか、2 番目のアクティビティの起動をブロックする必要があります (それでも、 2 番目のアクティビティを開始するための呼び出しは、フレームワークまで到達していました)。

于 2012-07-12T19:12:20.147 に答える
0

アクティビティが互いに通信して、一方のアクティビティが他方のアクティビティに終了を伝えることができる方法が必要です。これを実現する方法はいくつかあります。1 つの方法は、アプリケーション内でサービスを作成することです。「2 番目の」アクティビティはこのサービスに接続してメッセージを受信する方法を登録し、1 番目のアクティビティはメッセージを提供するために接続します。

于 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*/)

  • また、子アクティビティが終了したかどうかを確認する方法もあります。ただし、これを追跡できるのは、子アクティビティが自分自身に対して finish() を呼び出した場合のみです。子から子終了リクエストを受け取るには、親アクティビティでfinishFromChild()メソッドをオーバーライドする必要があります。

于 2012-07-12T15:32:00.397 に答える