アプリケーションをログアウトしている間にAndroidで戻るボタンを無効にするにはどうすればいいですか?
OnBackPressedメソッドをオーバーライドし、デバイスの戻るボタンを操作しようとしている場合は何もしません。
@Override
public void onBackPressed() {
if (!shouldAllowBack()) {
doSomething();
} else {
super.onBackPressed();
}
}
1.6までのAndroid APIレベルを探しているなら。
@Override
public boolean onKeyDown(int keyCode, KeyEvent event) {
if (keyCode == KeyEvent.KEYCODE_BACK) {
//preventing default implementation previous to Android.os.Build.VERSION_CODES.Eclair
return true;
}
return super.onKeyDown(keyCode, event);
}
そしてより高いAPIレベル2.0以上を探しているならこれはとてもうまくいくでしょう
@Override
public void onBackPressed() {
// Do Here what ever you want do on back press;
}
戻るボタンが押されないようにするために、あなたのアクティビティにこのコードを書いてください。
あなたはこの簡単な方法をすることができますsuper.onBackPressed()を呼ばないでください
@Override
public void onBackPressed() {
// super.onBackPressed();
// Not calling **super**, disables back button in current screen.
}
単にonBackPressed()メソッドをオーバーライドするだけです。
@Override
public void onBackPressed() { }
私はそれを使っています.............
@Override
public boolean onKeyDown(int keyCode, KeyEvent event) {
if(keyCode==KeyEvent.KEYCODE_BACK)
Toast.makeText(getApplicationContext(), "back press",
Toast.LENGTH_LONG).show();
return false;
// Disable back button..............
}
アクティビティが終了する前にAndroidクライアントアプリケーションが何らかのサーバーからログアウトされていることを確認したい場合 - >自分のスレッドでサービスを使用してログアウトします(これはとにかくあなたがするべきことです)。
戻るボタンを無効にしても何も解決されません。たとえば、ユーザーが電話を受けたときにも同じ問題が発生します。電話がかかってきたとき、あなたの活動はネットワークから信頼できる答えが返ってくるまでに殺される可能性がほぼ同じです。
そのため、ネットワークからの応答をサービスに独自のスレッドで待機させ、成功しなかった場合はサービスを再試行させる必要があります。 Androidサービスは、回答が返ってくる前に殺される可能性がはるかに低いだけでなく、仕事を終える前に本当に殺された場合でも、AlarmManagerによって常に再試行される可能性があります。
OnBackPressed()メソッドをオーバーライドするだけで、onBackPressedメソッドなどのスーパークラスを呼び出す必要はありません。
@Override
public void onBackPressed()
{
}
または現在のアクティビティをonBackPressed()メソッドに渡します。
@Override
public void onBackPressed()
{
startActivity(new Intent(this, myActivity.class));
finish();
}
必要なアクティビティ名をmyActivityに置き換えます。
フラグメントを使用している場合は、まず最初にcallParentMethod()メソッドを呼び出します。
public void callParentMethod(){
context.onBackPressed(); // instead of context use getActivity or something related
}
それから空のメソッドを呼び出します
@Override
public void onBackPressed()
{
}
FragmentActivity
を使用している場合それからこのようにする
まずあなたのFragment
の中でThisを呼び出します。
public void callParentMethod(){
getActivity().onBackPressed();
}
そして、親のonBackPressed
クラスの中でFragmentActivity
メソッドを呼び出します。
@Override
public void onBackPressed() {
//super.onBackPressed();
//create a dialog to ask yes no question whether or not the user wants to exit
...
}
このコードを使用するだけです。バックプレスを無効にする場合は、super.OnBackPressed()を使用しないでください。
@Override
public void onBackPressed() {
}
ログアウト中にアプリを無効にしたい場合は、キャンセルできないダイアログをポップアップ表示できます。
アクティビティのonBackPressed()
メソッドをオーバーライドしてスーパークラスへの呼び出しを削除できます。
@Override
public void onBackPressed() {
//remove call to the super class
//super.onBackPressed();
}
上記の答えからこれら2つの方法を別に形成しなさい。
onBackPressed() (APIレベル5、Android 2.0)
onKeyDown() (APIレベル1、Android 1.0)
このようにdispatchKeyEvent()
(API Level 1、Android 1.0)を上書きすることもできます、
dispatchKeyEvent()
(APIレベル1、Android 1.0)
@Override
public boolean dispatchKeyEvent(KeyEvent event) {
// TODO Auto-generated method stub
if (event.getKeyCode() == KeyEvent.KEYCODE_BACK) {
return true;
}
return super.dispatchKeyEvent(event);
}
戻るボタンのメソッドをオーバーライドするだけです。必要に応じてメソッドを空のままにして、戻るボタンを押しても何も起こらないようにすることができます。以下のコードを見てください。
@Override
public void onBackPressed()
{
// Your Code Here. Leave empty if you want nothing to happen on back press.
}
私にとってonBackPressed()
をオーバーライドするだけではうまくいきませんでしたが、どのアクティビティを開始するべきかを明示的に示すことでうまくいきました。
@Override
public void onBackPressed(){
Intent intent = new Intent(this, ActivityYouWanToGoBack.class);
startActivity(intent);
}
これを試して:
@Override
public boolean onKeyDown(int keyCode, KeyEvent event) {
if (keyCode == KeyEvent.KEYCODE_BACK) {
return true;
}
return super.onKeyDown(keyCode, event);
}
super.onBackPressed()
からpublic void onBackPressed()
を削除してください。 Android 9でテスト済み
Androidの戻るボタンを無効にする
@Override
public void onBackPressed() {
return;
}