3

私はAndroidアプリに取り組んでいます.現在、ユーザーはすべてのアクティビティで水平ビューのみを使用するように制限しています.

画面を回転するオプションをユーザーに提供できるようにしたいのですが、そうすると、同じままではなく、最初からアクティビティが開始されます。

画面を回転させたときに状態を保存する方法はありますか?

4

3 に答える 3

6

まず、アクティビティ内でオーバーライドする必要があります。onConfigurationChanged(Configuration)

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

    // Checks the orientation of the screen
    if (newConfig.orientation == Configuration.ORIENTATION_LANDSCAPE) {
        Toast.makeText(this, "landscape", Toast.LENGTH_SHORT).show();
    } else if (newConfig.orientation == Configuration.ORIENTATION_PORTRAIT){
        Toast.makeText(this, "portrait", Toast.LENGTH_SHORT).show();
    }
  }

また、マニフェストファイルの適切な要素を編集して、android:configChangesを含める必要があります。以下のコードを参照してください。

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

私もマルコのアイデアが好きですが、それは単に効率的ではありません。このように、onCreate / onStartup/etcを呼び出す必要はありません。いつも単純な回転をします。インフラストラクチャを最初から「再構築」する必要はありません(たとえば、ビューを取得するなど)。

于 2013-03-22T13:11:56.820 に答える
3

デバイスを回転させるたびに、onCreateメソッドが再度呼び出されます。onSavedInstanceStateをオーバーライドして値を保存し、onRestoreInstanceStateまたはonCreateメソッドに戻すことができます。たとえば、ブール値を保存しましょう(好きなものを保存できます):

値を保存します。

public void onSaveInstanceState(Bundle outState) {
        outState.putBoolean("booleanValue", true);
}

値を復元します(これはonCreateでも呼び出すことができます):

protected void onRestoreInstanceState(Bundle savedInstanceState) {
        if (savedInstanceState != null && savedInstanceState.containsKey("booleanValue")) {
            boolean myBoolean = savedInstanceState.getBoolean("booleanValue");
        }
        super.onRestoreInstanceState(savedInstanceState);
    }
于 2013-03-22T13:12:19.930 に答える
0
<activity (...)
          android:configChanges="orientation|keyboard"
          (...)>

これをマニフェストに追加しても、レイアウトを変更した後に Android がアクティビティを再開することはできません。

于 2013-03-22T13:15:26.863 に答える