プロファイルアクティビティのログアウトボタンをクリックすると、ユーザーをログインページに移動させ、そこで新しい資格情報を使用する必要があります。
したがって、私はこのコードを使用しました:
Intent intent = new Intent(ProfileActivity.this,
LoginActivity.class);
intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
startActivity(intent);
[ログアウト]ボタンのonButtonClick
で。
しかし問題は、ログインアクティビティでデバイスの戻るボタンをクリックすると、ProfileActivityに移動することです。 LoginActivityでデバイスの戻るボタンを押すと、アプリケーションが閉じるはずです。
何が間違っていますか?
LoginActivityのマニフェストにAndroid:launchMode="singleTop"
も追加しました
ありがとうございました
提案された解決策 ここ 私のために働いた:
Intent i = new Intent(OldActivity.this, NewActivity.class);
// set the new task and clear flags
i.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK | Intent.FLAG_ACTIVITY_CLEAR_TASK);
startActivity(i);
val i = Intent(OldActivity.this, NewActivity::class.Java)
// set the new task and clear flags
i.flags = Intent.FLAG_ACTIVITY_NEW_TASK or Intent.FLAG_ACTIVITY_CLEAR_TASK
startActivity(i)
ただし、11以上のAPIレベルが必要です。
ログアウトボタンを使用すると、アプリケーションのすべてのアクティビティをクリアする1つのソリューションがあります。
アクティビティを開始するたびに、次のように開始します。
Intent myIntent = new Intent(getBaseContext(), YourNewActivity.class);
startActivityForResult(myIntent, 0);
アプリ全体を閉じるには、次の操作を行います。
setResult(RESULT_CLOSE_ALL);
finish();
RESULT_CLOSE_ALLは、すべてのアクティビティを閉じることを示す一意の整数を持つ最終的なグローバル変数です。
次に、すべてのアクティビティのonActivityResult(...)
コールバックを定義して、アクティビティがRESULT_CLOSE_ALL値で戻ったときに、finish()
も呼び出します。
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
switch(resultCode)
{
case RESULT_CLOSE_ALL:
setResult(RESULT_CLOSE_ALL);
finish();
}
super.onActivityResult(requestCode, resultCode, data);
}
これにより、すべてのアクティビティを閉じるカスケード効果が発生します。
ただし、これはハックであり、使用するように設計されていない方法でstartActivityForResult
を使用します。
おそらくこれを行うためのより良い方法は、次に示すようにブロードキャストレシーバーを使用することです。
ログアウト時に、アクティビティ履歴スタックをクリアし、「戻る」ボタンがログイン専用のアクティビティを開かないようにする
他のメソッドについてもこれらのスレッドを参照してください。
アクティビティスタックを完全にクリアするには、次のようにTaskStackBuilderを使用して新しいタスクスタックを作成します。
Intent loginIntent = LoginActivity.getIntent(context);
TaskStackBuilder.create(context).addNextIntentWithParentStack(loginIntent).startActivities();
これにより、新しいクリーンなタスクスタックが作成されるだけでなく、LoginActivityに親アクティビティがある場合、「上」ボタンが適切に機能するようになります。
finishAffinity()
はAPI 16に追加されました。以前のバージョンではActivityCompat.finishAffinity()
を使用してください。インテントを使用してアクティビティを起動し、現在のアクティビティを終了するとき。 ActivityCompat.finishAffinity()
の代わりにfinish()
を使用します。現在のアクティビティより下のすべてのスタックアクティビティを終了します。それは私のためにうまく機能します。
私のために働いたもの
Intent intent = new Intent(getApplicationContext(), HomeActivity.class);
ComponentName cn = intent.getComponent();
Intent mainIntent = IntentCompat.makeRestartActivityTask(cn);
startActivity(mainIntent);
API 11以降では、次のようにIntent.FLAG_ACTIVITY_CLEAR_TASK|Intent.FLAG_ACTIVITY_NEW_TASK
を使用できます。
Intent intent = new Intent(this, MyActivity.class);
intent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TASK|Intent.FLAG_ACTIVITY_NEW_TASK);
this.startActivity(intent);
以前のすべてのアクティビティを完全にクリアし、新しいアクティビティを開始します。
私が提案できる解決策の1つは、私のProfileActivityのマニフェストにAndroid:launchMode="singleTop"
を追加することです。ログアウトがクリックされると、u logoff再び開始しますLoginActivity。ログアウトu canこれを呼び出します。
Intent in = new Intent(Profile.this,Login.class);
in.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
startActivity(in);
finish();
finishAffinity()
を試すことができます。現在のすべてのアクティビティが閉じられ、Android 4.1以降で動作します
私も同じ問題に直面しています。
ログインアクティビティで私がやることは。
Intent myIntent = new Intent(MainActivity.this, ActivityLoggedIn.class);
finish();
MainActivity.this.startActivity(myIntent);
ログアウト時
Intent myIntent = new Intent(ActivityLoggedIn.this, MainActivity.class);
finish();
ActivityLoggedIn.this.startActivity(myIntent);
これはうまく機能しますが、ActivityLoggedInにいて、アプリを最小化し、アプリドロワーのランチャーボタンアイコンをクリックすると、MainActivityが再び起動します:-/フラグを使用しています
Android:LaunchMode:singleTask
MainActivityの場合
activity
には次を使用します
intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP | Intent.FLAG_ACTIVITY_CLEAR_TASK | Intent.FLAG_ACTIVITY_NEW_TASK);
remove CLEAR_TASKフラグメント使用のフラグ。
これが何人かの人々に役立つことを願っています。
これを試してみてください:
Intent logout_intent = new Intent(DashboardActivity.this, LoginActivity.class);
logout_intent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
logout_intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
logout_intent.setFlags(Intent.FLAG_ACTIVITY_NO_HISTORY);
startActivity(logout_intent);
finish();
ただ保つ
Intent intent = new Intent(ProfileActivity.this,
LoginActivity.class);
intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
startActivity(intent);
APIレベル11以降では、IntentでFLAG_ACTIVITY_CLEAR_TASK
およびFLAG_ACTIVITY_NEW_TASK
フラグを使用して、すべてのアクティビティスタックをクリアします。
Intent i = new Intent(OldActivity.this, NewActivity.class);
// set the new task and clear flags
i.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK | Intent.FLAG_ACTIVITY_CLEAR_TASK)
startActivity(i);
どのインテントフラグも機能しませんでしたが、次のように修正しました。
ユーザーが1つのアクティビティからサインアウトすると、そのアクティビティからメッセージをブロードキャストする必要があり、その後、終了したいアクティビティでメッセージを受信し、その後finish()を呼び出します。そしてそれはかなりうまく機能します。
これを使用
Intent i1=new Intent(getApplicationContext(),StartUp_Page.class);
i1.setAction(Intent.ACTION_MAIN);
i1.addCategory(Intent.CATEGORY_HOME);
i1.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
i1.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TASK);
i1.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK | Intent.FLAG_ACTIVITY_CLEAR_TASK);
startActivity(i1);
finish();