2011-12-05 12 views
1

Android搭載端末をローテーション(コンフィグレーションが変更された場合)すると、どのメソッドがオーバーライドされているか知りたいですか?Androidの設定が変更されました

onSaveInstanceState(...)onConfigurationChanged(...)onRestoreInstanceState(...) - これに類似したものはありますか?

構成変更に関連したプロセス全体について聞くことも面白いでしょう。ありがとう。 Androidの開発者から

答えて

3

あなたの活動を再作成するデバイスを回転すると、すべての変数が再なります初期化されました。したがって、Rotationで同じ値を維持する場合は、onSaveInstanceState()を使用して状態を保存し、Bundle is nullでないことを確認してonCreate()に再度復元することができます。あなたは(これが唯一のコンフィギュレーションを選択した場合、あなたのマニフェストにconfigChanges属性を扱うしたいと呼ばれること注)デバイスを回転させたときにとして呼び出されます

if(savedInstanceState != null){ // get the restore value from the Bundle } 

。このパラメータから新しいデバイス設定を取得します。

Deviceのローテーションでアクティビティを再作成したくない場合は、この行をAndroidManifestファイルのアクティビティタグに追加する必要があります。

@Override 
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(); 
    } 
} 

詳細については以下を参照してください:ここでhttp://developer.android.com/guide/topics/manifest/activity-element.html#config

あなたがすることができますhttp://developer.android.com/guide/topics/resources/runtime-changes.html#HandlingTheChange

は、あなたが見ることに興味がある可能性

android:ConfigChanges="keyboardHidden|orientation" 
+0

私はこれに問題があります。私は風景と肖像画の2つのレイアウトを持っています。私はテキストビューを持っています。そして私は、回転しているときにタイプされたテキストを失わないようにしたい。この瞬間に私はonConfigurationChangedを使いました、onCreateと基本的に同じスタッフがいます。問題は、onConfigurationChangedではバンドルがなく、入力されたテキストを保存/取得できないということです。 onSaveInstanceState()とonConfigurationChanged()を使用すると、最初のものは効果を与えません。私はこの問題を解決する方法がわかりません.... – lomza

+0

あなたはonCreate()でBundle値を取得し、さらにそれを使用します。 –

+0

自分の間違いを理解しました。私はconfigChangesを使う必要はありませんでした。 onSaveInstanceStateとonRestoreInstanceStateをオーバーライドするだけでした。テキストビューを保存/取得することができます。レイアウト設定の処理は自動的に行われるので、何もする必要はありません。 onConfigurationChangedはすべてをオーバーライドしていたので、複雑なロジックは必要ありません。 – lomza

2

...

は、ランタイム構成の変更時にオブジェクトを保持する:

  1. オーバーライドあなたが保持したいオブジェクトを返すようにonRetainNonConfigurationInstance()方法。
  2. アクティビティが再度作成されたら、getLastNonConfigurationInstance()に電話してオブジェクトを回復してください。

は、Androidが原因構成の変更をonStop()とonDestroy()それはあなたの活動をシャットダウンするときの間onRetainNonConfigurationInstance()を呼び出します。 onRetainNonConfigurationInstance()の実装では、構成の変更後に状態を効率的に復元するために必要なオブジェクトを返すことができます。

これは、アプリケーションがWebから多くのデータを読み込む場合に役立ちます。ユーザーがデバイスの向きを変更し、アクティビティが再開した場合、アプリケーションはデータを再フェッチする必要がありますが、遅くなる可能性があります。代わりにonRetainNonConfigurationInstance()を実装してデータを保持するオブジェクトを返し、アクティビティがgetLastNonConfigurationInstance()で再び開始されたときにデータを取得することができます。あなたも自分の..

おかげで上の例を見つけることができる詳細Retaining an Object During a Configuration Changeため、ここで

ルックは...

+0

ありがとう:このコードをコピーして貼り付けます。役に立つ情報;) – lomza

4

は、Android開発者のリファレンスによると、あなたが使用する必要がありますあなたが聞くことができるすべての構成リスナーを見つける。

アンドロイドマニフェストでそれらを置くことを忘れないでください:

+0

「ランタイム変更の処理」リンクをありがとう。私は現在onConfigurationChangedを使用しています。 – lomza

+0

この回答は私を助けましたが、 'android:configChanges'の何らかの形でマニフェストを更新することについての部分..底に向かっていたので私はそれを逃しました。大したことではありませんが、Javaコードの近くにそれを持つのに役立つかもしれません。私はそのメソッドでブレークポイントを設定していましたが、マニフェストの更新が必要であることがわかるまでトリガーされませんでした。いずれにしても、私は正しい方向へ行くことに感謝しています! – gnB

0

Goはマニフェストと追加する...

<activity 
    android:configChanges=["orientation"] 
    . . . 
</activity> 

ホープ、このことができますアンドロイド:configChanges = "オリエンテーション|画面サイズ"

<activity android:name=".MainActivity"> 
      <intent-filter> 
       <action android:name="android.intent.action.MAIN" 
        android:configChanges="orientation|screenSize" 
        /> 

In Main Ac tivity

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


    } 

すべて完了 -

関連する問題