【Android】スマホを傾けると画面をリロードしてしまう件

Androidのアプリを開発していると必ずと言っていいほどこの問題に当たることでしょう。私もこれに陥り、スマホを傾けると更新中の画面が再構築され、デフォルトの画面に戻ってしまいました。どうやら、構成の変化(※)が起きるとonDestroy→onCreateするようです。そんな時はonConfigurationChangedメソッドを使うことで画面の再構築を自分でコントロールすることができます。実に簡単です。2つのファイルにちょこっとコードを追加するだけでよいのです。それではやってみましょう。

※構成の変化には、スマホの傾き、キーボードの可用性、言語等があります。

①AndroidManifest.xmlファイルのactivityに処理する構成を表す値を使用して「android:configChanges」属性を追加します。今回はスマホの傾きの為、「orientation|screenSize」を指定します。

【AndroidManifest.xml】

<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    package="com.example.User.Application">

    <application
        android:allowBackup="true"
        android:icon="@mipmap/ic_launcher"
        android:label="@string/app_name"
        android:supportsRtl="true"
        android:theme="@style/AppTheme">
        <activity android:name=".MainActivity"
            <!--↓↓↓追加部分↓↓↓-->
            android:configChanges="orientation|screenSize"
            <!--↑↑↑追加部分↑↑↑-->
            >
            <intent-filter>
                <action android:name="android.intent.action.MAIN" />
                <category android:name="android.intent.category.LAUNCHER" />
            </intent-filter>
        </activity>
    </application>
</manifest>

②MainActivity.javaファイルに以下の関数を追加します。①と組み合わせることで、スマホの傾きに変化が起きると、onCreate()メソッドが呼ばれずにonConfigurationChanged()メソッドが呼ばれることになります。

【MainActivity.java】

public void onConfigurationChanged(Configuration newConfig) {
    super.onConfigurationChanged(newConfig);
}

以上でスマホを傾けても画面の状態を保ったまま継続して表示することができます。