1

次のような起動フローを持つアプリケーションがあります。

StartupActivity -> LoginDialog -> LoginActivity -> HomeActivity

LoginActivity から HomeActivity に移動すると、次のように呼び出します。

Intent intent = new Intent( this, HomeActivity.class );
if( Build.VERSION.SDK_INT >= Build.VERSION_CODES.HONEYCOMB )
{
    intent.setFlags( Intent.FLAG_ACTIVITY_CLEAR_TASK | Intent.FLAG_ACTIVITY_NEW_TASK );
}
else
{
    intent.setFlags( Intent.FLAG_ACTIVITY_CLEAR_TOP | Intent.FLAG_ACTIVITY_SINGLE_TOP );
}
startActivity( intent );
finish();

On >= API 11、これにより、HomeActivityがまったく新しいタスクになり、StartupActivityがバックスタックになくなります。

ただし、 ではAPI <= 10、 はをバック スタックからFLAG_ACTIVITY_CLEAR_TOP | FLAG_ACTIVITY_SINGLE_TOPクリアしますが、はまだそこにあります。ユーザーが から戻るをクリックすると、 に戻ります。LoginActivityStartupActivityHomeActivityStartupActivity

バックスタックから StartupActivity をクリアするにはどうすればよいですか?

  • 私の調査から、最良の方法は startActivityForResult() のようですが、ダイアログからそれを行うことはできますか? 誰が結果を得るのですか?

まとめ

  • からStartupActivity、 を示しますLoginDialog
  • から、バック スタックをクリアせず LoginDialogに に移動します。LoginActivity
    • これは、ユーザーが から に戻れるようにするLoginActivityためStartupActivityです。
  • からLoginActivityに移動しHomeActivity、バック スタックをクリアします。
  • StartupActivity戻るを押すと、オンに戻りますdevices <= API 10
4

2 に答える 2

1

やり方が分かった...

LoginDialog が LoginActivity を開始するときに、startActivityForResult() を使用して、LoginActivity が StartupActivity に結果を返すようにします。結果としてログインが成功した場合は、StartupActivity を終了できます。

LoginDialog は複数の場所からトリガーできますが、startActivityForResult() を呼び出すために StartupActivity からトリガーされる場合はフラグを設定できます。

私が行き詰まっていたのは、ダイアログから startActivityForResult を使用して、ダイアログを起動したアクティビティに結果を戻す方法でした...そして私はそれを理解しました。

于 2013-02-14T22:05:09.563 に答える
0

AndroidManifest.xmlファイルに以下を追加します

android:noHistory="true"

バックスタックから削除するすべてのアクティビティ。タグの中に入れる必要があり<activity>ます。

または、新しいアクティビティを開始したらすぐに、StartupActivityでfinishを呼び出します。

それを行う正しい方法として、最初のオプションをお勧めします。

乾杯。

この答えを見てください->答え

于 2013-02-14T02:19:41.967 に答える