現在のアクティビティをホーム画面に終了する方法(「ホーム」ボタンを使用せずに)?

StackOverflow https://stackoverflow.com/questions/2758786

質問

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

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

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

アンケートアプリには、単一のアクティビティ(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(); しかし、これは奇妙に「ありがとう」画面をもう一度もたらします。それで、ホーム画面に戻ってどのように終了することができますか?

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

役に立ちましたか?

解決

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

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

もしそうなら、一度 finish() アクティビティA、ユーザーはアプリを開始する前にどこにいても戻ります - おそらくAppWidgetから始まった場合、おそらくホーム画面です。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top