web-dev-qa-db-ja.com

向きの変更とアプリケーションの終了を区別する方法android

画面の向きが変わると、現在のアクティビティonDestroy()が呼び出され、その後にonCreate()が呼び出されて、アクティビティを効果的に再作成することを理解しています。アプリケーションが終了しているかどうか、または方向だけが変更されているかどうかをプログラムで確認する方法を知る必要があります。

1つは、前のアクティビティでonResume()メソッドが呼び出されたときに通知する方法です。これにより、ユーザーが[戻る]ボタンを押し、方向が変更されていないことがわかります。

追伸ハードウェアの戻るボタンのクリックを聞くよりもエレガントなソリューションを探しています。

これが私がやりたかったことです:

2つのタブがあります。アクティビティが初めて入力されたとき、またはユーザーがアクティビティを離れて現在入力しているとき、何らかの基準に基づいて特定のタブが表示されます。

向きが変わっても、同じタブに留まる必要があります。

アクティビティのisFinishing()メソッドを使用します。

@Override
  protected void onDestroy() {
    super.onDestroy();
    if (isFinishing()) {
      // do stuff
    } else { 
      //It's an orientation change.
    }
  }
93
dmon

isChangingConfigurations()を使用できます ドキュメント から読み取ります

新しい構成で再作成するために、このアクティビティが破棄されているかどうかを確認してください。これは、状態をクリーンアップする必要があるか、onRetainNonConfigurationInstance()を介してアクティビティの次のインスタンスに渡されるかどうかを決定するために、onStop()でよく使用されます。

戻り値新しい構成で再作成するためにアクティビティが破棄されている場合は、trueを返します。それ以外の場合はfalseを返します

例を使って簡単に説明する

isChangingConfigurations()

アクティビティが破棄されて再作成されるかどうかを確認するために使用されるメソッドです(方向の変更の結果として)

それの使い方 ?

api> = 11を使用する場合は問題ありませんが、api <11を使用する場合は、このメソッドを手動で処理する必要がありますIsconfigChangeというブール変数を作成します

private boolean IsconfigChange ;
...

protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        IsconfigChange = true ;

}


    @TargetApi(Build.VERSION_CODES.HONEYCOMB) 
    @Override
    public boolean isChangingConfigurations() {
        if(Android.os.Build.VERSION.SDK_INT >= 11){
            Log.i("DEBUG", "Orientation changed api >= 11 ");
            return super.isChangingConfigurations();    
        }else {
            Log.i("DEBUG", "Orientation changed api < 11 ");
            return IsconfigChange; 
        }
    }

    @TargetApi(Build.VERSION_CODES.HONEYCOMB) 
    @Override
    protected void onStop() {
        super.onStop();
        if(isChangingConfigurations()){
            Log.i("DEBUG", "isChangingConfirgurations OnStop Called");
        }  else{
            Log.i("DEBUG", "OnStop Called");
        }
    }

概要

isChangingConfigurationsonStopを使用して、アプリが破棄されるのを止めるか、または向きの変更が原因であるかを確認できます。

または、isFinishingを使用して私の答えを確認する ここ

20
Mina Fawzy

aPI lvl> = 11の場合、アクティビティにはisChangingConfigurations()メソッドがあります

3
Maurycy

onDestroyコールバックで Activity.getChangingConfigurations() メソッドの値を取得できます。これは ORIENTATION_PORTRAIT のような結果を返します。これは 現在の方向 に対して確認できます。

アクティビティの終了と向きの変更は、ここで考慮すべきonly条件ではないことに注意してください:ホーム画面に戻る、電話の着信、その他のアプリについてフォーカスを奪い、アクティビティがスタックの最前線でなくなったときの他のすべてのシナリオ?

ほとんどの場合、これを行う必要はありません。方向イベントをキャプチャして、アクティビティ状態の問題(画面を回転するとNullPointerExceptionとして現れることが多い)を修正しようとしている場合。 Androidアクティビティのライフサイクルを見直して、設計上の欠陥を修正するためだけにハッキングしようとしているのではないことを確認してください。不明な場合は、このサイトに元の問題を投稿してください。

1
seanhodges