0

私のアプリケーションでは、戻るボタンをクリックすると、以前に開いたすべてのアクティビティを通過します。public voidonBackPressed()メソッドを使用して、戻るボタンを必要なアクティビティに戻します。

public void onBackPressed()
  {
    startActivity(new Intent("com.MyDiet.Main"));
    Tracker.this.finish();
  }

戻るボタンをコーディングするための真の安全な方法はありますか? 戻るボタンが押されたときに、アプリケーションが以前に開いたすべてのアクティビティを通過しないようにするにはどうすればよいですか? メインアクティビティで戻るボタンをクリックしたときにアプリケーションを終了させるにはどうすればよいですか?

4

4 に答える 4

1

アプリケーション、およびすべての Android アプリケーションで、不要な手順 (既にログインしている場合のログインなど) を通過しないことが重要でない限り、Android の標準的な動作を上書きしないことが非常に重要です。ユーザーは通常、Android アプリに共通の動作やスタイル ガイドラインがないことに不満を漏らします。

とにかく、ええ、すべてのアクティビティで onBackPressed をオーバーライドして、好きなことをすることができます。しかし、そうしないでください。

于 2012-05-31T15:13:23.203 に答える
0

アプリケーションのアクティビティスタックを汚染しているため、このアプローチは適切ではありません。

例:

現在のスタック:MainAct-> Act2-> Act3(アクティビティ3にあります)

上記のコードで、押すと、スタックは次のようになります。

MainAct-> Act2-> MainAct

Act3を終了し、新しいメインアクティビティを開始したためですが、これは希望どおりではない可能性があります。

目的を達成するには(現在のアクティビティが終了したらメインに戻る)、中間アクティビティに取り組む必要があります。上記の例では、Act2からstartActivity( "Act3")を呼び出すときに、"this.finishを呼び出す必要があります。 ()」。したがって、アクティビティ3の「onBackPressed()」をオーバーライドする必要はありません。デフォルト値はAct3を終了し、スタック内の次のアクティビティはMainActになります。

MainAct-> A2(A2はA3を起動し、this.finish()を呼び出します)

MainAct-> A3(ユーザーは今押し返します)

MainAct(メインアクティビティが最上位になりました)

要約すると、onBackPressedをオーバーライドする必要はなく、メインアクティビティと現在のアクティビティの間のアクティビティのライフサイクルを正しく管理する必要があります。

于 2012-05-31T15:30:15.893 に答える
0

一般的に言って、ユーザーが期待しないように動作させることはお勧めできません。これは非常に悪い習慣と見なされます。そのため、オーバーライドされた状態からアクティビティを開始するのは適切ではありませんonBackPressed()

ユーザーがデフォルトで押し戻すと、アクティビティが終了し、バックスタックからのアクティビティが表示されます。開発者としてのあなたは(コードを書くことによって)どちらがそれであるかを決定します。この方法でそれを行うことはできますが、後で(または他の誰かにとって)、他のアクティビティを開始しているコードのこの珍しい場所を見つけるのは少し厄介で困難になります。

したがって、アクティビティのライフサイクルバックスタックについて読んで、それがどのように機能するかを印象付け、用語をよりよく理解することは有用です。

アクティビティの1つをバックスタックに残したくない場合は、そのアクティビティのmanifest fileファイルandroid:noHistory="true"を追加できます。

アクティビティを開始するときにインテントに適切なフラグを追加することで、コードから達成できるのと同じことです。 Intent.FLAG_ACTIVITY_NO_HISTORY

ユーザーがActivityOneから「離れる」(インテントの使用を開始するか、説明のように定義されてmanifestいる)場合、新しいActivityTwoに移動してから戻ると、バックスタックにないため、ActivityOneに移動しません。これを使用すると、アクティビティのナビゲーションを正確に制御できます。

より多くのフラグを使用できますが、これはあなたが達成したかったことだと思います。

私の答えがお役に立てば幸いです。乾杯..

于 2012-05-31T15:40:01.573 に答える
0

多くのトリックを使用して、完全なアプリケーションを終了することができます。これを使用してインテントを開始し、androidmanifest からホームへのカテゴリを選択し、現在のアクティビティを閉じます。

public void onBackPressed() {
    Intent intent = new Intent(Intent.ACTION_MAIN);
    intent.addCategory(Intent.CATEGORY_HOME);
    intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
    startActivity(intent);
    finish();
}
于 2016-02-10T16:16:33.553 に答える