1

私はこれが答えられると確信していますが、私はそれを見つけることができないことを証明しました。だから私の冗長性を許してください。

私がやろうとしているのは、Androidのホーム画面に戻る「ホーム」ボタンをエミュレートすることです。だからここに私に問題を引き起こすものがあります:

  • ランチャーアクティビティは3つあります。最初のもの(ホーム画面アイコンに接続されている)は、単なる(パスワードで保護された)構成アクティビティです。ユーザーは使用しません(管理者のみ)
  • 他の2つ(どちらもアプリウィジェットを介してアクセス)の1つは、アンケートアプリです。[戻る]ボタンまたはGUIの[戻る]ボタンを使用して、質問間を戻ることもできます。アンケートが終了したら、与えられた回答を要約し、ユーザーをホーム画面に戻すための「完了」ボタンを提供します。

アンケートアプリでは、1つの質問から別の質問にジャンプするためにそれ自体を呼び出す単一のアクティビティ(ItemActivityと呼ばれる)を使用します(インテントを使用する場合も再帰ですか?)。

Questionnaire.serializeToXML();  
Intent i = new Intent().setClass(c, ItemActivity.class);  
if(Questionnaire.instance.getCurrentItemNo() == Questionnaire.instance.getAmountOfItems()) {  
    Questionnaire.instance.setCompleted(true);  
} else Questionnaire.instance.nextItem();  
startActivity(i);

最後の画面には、「参加していただきありがとうございます」のようなものと、ホーム画面に戻るはずの前述のボタンが表示されます。しかし、アクティビティを適切に終了する方法がわかりません。私は例えば使用しましthis.finish();たが、これは奇妙なことに「ありがとう」画面を再び表示します。では、どうすればホーム画面に戻って終了できますか?

ご不便をおかけして申し訳ありません。
よろしく、
ステフ

4

1 に答える 1

8

アクティビティの複数のコピーを同時に開いているようです。アクティビティの新しいインスタンスを開始するたびに、スタックに新しいインスタンスを追加しているだけです。古いアクティビティはすべてそこに残っています。を呼び出すとthis.finish()、開いていた次の最新のアクティビティが表示されます。おそらく最後にしか開かれないので、なぜ「ありがとう」画面なのかはわかりませんが、アクティビティが呼び出される順序を完全には踏襲していません.

それを修正するために試すことができるのは、1)finish()別の質問に対して新しいアクティビティを開始した後に毎回使用する (一度に 1 つの質問アクティビティのみが開かれるようにするため)、または 2) 使用できるかどうかを確認することです。インテント フラグ CLEAR_TOP の。これにより、ターゲット アクティビティが開始され、スタック内でその上にあった可能性のあるものはすべて殺されます。たとえば、アクティビティがある場合: A、B、C、C、C、C、C (質問ごとなど)、CLEAR_TOP で A を開始すると、B と C のすべてのインスタンスが強制終了されます。これをプログラム構造に適合させることができます。ユーザーがアンケートを開始したときに最初に表示される画面を変更します。これにより、デフォルトで「ようこそ」メッセージが表示され、アンケートを開始するボタンが表示されます。ただし、インテントにバンドルされた特定の値で開始された場合、「Thank you」が表示されます。

これを行うと、finish()A をアクティビティすると、ユーザーはアプリを起動する前の場所に戻ります。アプリウィジェットで起動した場合は、おそらくホーム画面になります。

于 2010-05-03T15:16:58.403 に答える