2012-07-01 13 views
5

を変更したとき、私は[リンク]のように、この問題に関する多くの記事を読んで再起動し、[1]と一つの解決策は、回転時に再び呼び出されるマニフェストとのonCreate活動を防ぐためにonConfigurationChangedイベントを処理するためにオリエンテーションconfigChangesを追加しています。私はそれを行い、イベントは適切にトリガされますが、この実行後、onCreateメソッドも実行されます!どうして?私は何が欠けているのですか?あなたアンドロイド活動は向きが

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

@Override 
    protected void onCreate(Bundle savedInstanceState){ 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.vistaaib); 
... 

答えて

11

私はこれが動作すると思います.........

のAndroid 3.2(APIレベル13)、意志「画面から始まり
<activity android:name=".MyActivity" 
      android:configChanges="orientation|keyboardHidden" 
      android:label="@string/app_name"> 

デバイスが縦と横の向きに切り替わると、「サイズ」も変化します。 APIレベル13以上のために開発するときに姿勢変化による実行時の再起動を防止したい場合は、menifestファイルではAPIレベル12以下

のために働いている場合はこのように、あなたは

android:configChanges="orientation|screenSize" 
+0

はonConfigChangesイベントの後にonCreateをトリガーします – Jaume

+0

これはAndroidManifestファイルでonCreate()を呼び出さないようにする必要のあるアクティビティの下で述べましたか? –

+0

はい、 webPushは、そのonCreateメソッドが防止される必要があるアクティビティです – Jaume

1

は、その活動のマニフェストファイル内のコードのこの2行を書く

マニフェスト、

<activity 
      android:name="webPush" 
      android:configChanges="keyboardHidden|orientation"/> 

活動を、ありがとうございます。

が、これはあなたの問題を解決するようです。 <activity android:name=".YourActivity" android:configChanges="orientation|keyboardHidden"/>

+0

あなたはオリエンテーションのために、実行時の再起動を防止したい場合は、まだのonCreateはonConfigChangesイベントの後 – Jaume

1

あなたの活動は、すべての構成変更で再起動されます。ほとんどの場合、キーボードの状態が変わるため再起動されている可能性があります。アクティビティの属性にこれを追加してみてください:

android:configChanges="orientation|keyboard|keyboardHidden" 
+0

はまだonConfigChangesイベント – Jaume

+1

後のonCreateをトリガートリガーAPIレベル13以上の開発時に変更する場合は、「orientation」値に加えて「screenSize」値を含める必要があります。つまり、あなたはアンドロイドをdecalareする必要があります:configChanges = "orientation | screenSize" – Rashid

0

を使用する必要があり、置きますあなたの活動名を宣言した直後に

android:configChanges="orientation" 

e.g.-

<activity 
     android:name=".NameOfYourActivity" 
     android:configChanges="orientation"/> 

とAndroid 3.2(APIレベル13)以上バージョン画面サイズでもそうこれも宣言回転変化に変化します。このため

android:configChanges="orientation|screenSize" 
2

私はこれをしませんでした。 私はマニフェストにこのコードを追加し、それが完璧に動作します。

<activity 
     android:name="?" 
     android:label="@string/?" 
     android:theme="@style/?" 
     android:configChanges="orientation|screenSize"> 

デバイスがローテーションのときに何かを変更するには、このアクティビティをアクティビティの下に追加する必要があります。画面サイズ

が現在利用可能な画面サイズが変更されています後

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

は、イベントの理由だろう。これは、現在のアスペクト比に対する現在利用可能な大きさの変化を表し、ユーザがランドスケープとポートレートを切り替えるときに変化します。ただし、アプリケーションがAPIレベル12以下をターゲットにしている場合、アクティビティは常にこのコンフィグレーションの変更を処理します(このコンフィグレーションの変更は、Android 3.2以降のデバイスでもアクティビティを再開しません)。 13.

ので、「オリエンテーション」と一緒にAPIレベルの 追加は、同様に「画面サイズ」を追加し

関連する問題