0

グラフをご覧ください: http://i.imgur.com/6FiGe.png

アプリのアーキテクチャに問題があります。いくつかの活動/州があり、それらに到達すると戻ることはできません。これらはKA、およびXであるため、それらに到達して戻るボタンを押すと、アプリが閉じます。

STARTアクティビティを使えばとても簡単です。KまたはAに移動するかどうかを決定する作業を行うとすぐに、 START .finish() を実行するだけで、それが必要です ( KまたはAアクティビティにあり、戻るボタンを押すと、STARTアクティビティが存在しなくなったためアプリが閉じます) )。

問題はX状態から始まります。このアプリケーションは、次の 3 つのステップを完了する必要があるようなものです。

[開始]->[ A <-> B <-> C ]->[ X ]

要件は、戻るボタンを押している間です。

A : アプリを閉じる

オンB : ショー A

オンC : ショー B

最終的にある種のウィザード ( A -> B -> C ) を終了すると、 Xに到達し、[戻る] ボタンを押すだけでアプリが閉じます。

質問: X から戻るボタンを防ぐには、どのように A、B、C を終了する必要がありますか? 使用する参照はありません。

4

3 に答える 3

2

これを実現する 1 つの方法は、アクティビティ X で、戻るボタンを押すとカスタム イベントが発生するようにすることです。

@Override
public boolean onKeyDown(int keyCode, KeyEvent event) {
    if (keyCode == KeyEvent.KEYCODE_BACK) {
        backPressed();
        return true;
    }
    return super.onKeyDown(keyCode, event);
}

public void backPressed()
{
   Globals.finished = true;
   finish();
}

上記のメソッドにはGlobals.finished = true;という行があることに気付くでしょう。これは、次のように最初は false に設定されている、finished という名前の static (オブジェクトをインスタンス化せずにクラスで static を呼び出すことができる) ブール変数を持つ Global という名前のクラスを参照します。私自身のアプリでは、アプリ全体に共通するものを共有するために Globals クラスをよく使用します。共有設定を使用して、同様のことを行うこともできます。

public class Globals
{
  public static finished = false;
}

次に、すべてのアクティビティの onResume (または場合によっては onStart) ライフサイクル メソッドで、次を配置できます。

if (Globals.finished == true)
    finish();

これにより、すべてのアクティビティがすぐに閉じられますが、グローバルの終了変数が true になった場合のみです。私は以前にこれを行ったことがあり、非常にうまく機能し、アクティビティが終了時にライフサイクルメソッドを確実に呼び出すようにします。

これよりも簡単に、ActivityX の onClose メソッドで Globals.finished = true を設定することで、戻るボタンのイベント ハンドラーの使用を避けることができます。

于 2012-04-22T00:40:34.237 に答える
1

finish()終了したいアクティビティにずっと電話をかける必要があります。startActivityForResultを使用して、back'n'finish プロセスを支援します

于 2012-04-21T23:57:23.723 に答える
0

このLINKを参照できます。

アクティビティ A、B、C のマニフェスト ファイルに android:noHistory="true" を追加できます。つまり、...

マニフェストのサンプルコードは次のようになります

<activity android:label="string resource" android:name="activityA" android:noHistory="true" />
于 2012-04-22T02:51:07.400 に答える