回転時にアクティビティが再開される Android 質問する

回転時にアクティビティが再開される Android 質問する

私の Android アプリケーションでは、デバイスを回転させると (キーボードをスライドさせると)、 がActivity再起動されます (onCreateが呼び出されます)。 さて、これはおそらく正しい動作ですが、 メソッド内で多くの初期設定を行うためonCreate、次のいずれかが必要です。

  1. 初期設定をすべて別の機能にまとめておくと、デバイスの回転や
  2. 再度呼び出されないようにしてonCreate、レイアウトを調整するか、
  3. onCreate呼び出されないように、アプリをポートレートのみに制限します。

ベストアンサー1

アプリケーションクラスの使用

初期化で何を行うかに応じて、拡張する新しいクラスを作成しApplication、初期化コードをonCreateそのクラス内のオーバーライドされたメソッドに移動することを検討できます。

Kotlin バージョン

class MyApplicationClass: Application {
    @override fun onCreate() {
        super.onCreate()
        // Put your application initialization code here
    }
}

Javaバージョン

public class MyApplicationClass extends Application {

    @Override
    public void onCreate() {
        super.onCreate();
        // Put your application initialization code here
    }
}

アプリケーション クラスのはonCreate、アプリケーション全体が作成されたときにのみ呼び出されるため、方向の変更やキーボードの表示の変更によってアクティビティが再起動されても、これはトリガーされません。

このクラスのインスタンスをシングルトンとして公開し、ゲッターとセッターを使用して初期化するアプリケーション変数を公開することをお勧めします。

注: 新しい Application クラスを登録して使用するには、マニフェストでそのクラスの名前を指定する必要があります。

<application
    android:name="com.you.yourapp.MyApplicationClass"

構成変更への対応

更新: これは API 13 以降では非推奨です。推奨代替案を見る

さらに別の方法として、アプリケーションで、向きやキーボードの表示の変更など、再起動を引き起こすイベントをリッスンし、アクティビティ内で処理することもできます。

まず、android:configChangesアクティビティのマニフェスト ノードにノードを追加します。

 <activity android:name=".MyActivity"
      android:configChanges="orientation|keyboardHidden"
      android:label="@string/app_name">

またはAndroid 3.2 (API レベル 13) 以降:

<activity android:name=".MyActivity"
      android:configChanges="keyboardHidden|orientation|screenSize"
      android:label="@string/app_name">

次に、アクティビティ内でonConfigurationChangedメソッドをオーバーライドして呼び出し、setContentViewGUI レイアウトを新しい方向で強制的に再実行します。

Kotlin バージョン

@override fun onConfigurationChanged(newConfig: Configuration) {
    super.onConfigurationChanged(newConfig)
    setContentView(R.layout.myLayout)
}

Javaバージョン

@Override
public void onConfigurationChanged(Configuration newConfig) {
    super.onConfigurationChanged(newConfig);
    setContentView(R.layout.myLayout);
}

おすすめ記事