2016-07-20 9 views
0

私のアプリケーション(minSdkVersion 17ですが、これについては柔軟です)では、私は1つのアクティビティを持っています。それは何らかのタイムテーブルを表示します。私はそれが現在の日を示し、正しい時間にスクロールさせたいと思います。 この機能はすでに完璧に機能しています。Android:アプリケーションがアクティブになっていて、オリエンテーションの変更ではなくコードを実行する

アプリが起動されるたびに、またはアプリが再びアクティブになるたびに(ホームボタンを押してからアプリアイコンをもう一度クリックしてアプリを終了しないで)

しかし、私はデバイスを回転させたときにこれをしたくありません。

例えば、私は方法があります:

private void scrollToNow() { 
    // do the calculation and scroll all views to the correct position 
    // this is code I already have fully functional! 
} 

を、私はそれに活動が再びアクティブになるたびに実行したいではなく、姿勢の変化に。

多くの組み合わせ(onStartonResumeonCreate)を試しましたが、そのうちのどれもトリックを行っていませんでした。私は、savedInstanceStateを使用してソリューションを構築しようとしましたが、失敗しました。

誰かが私のためのヒントや役に立つリンクを手に入れましたか?

おかげでたくさん、

オリバー

答えて

2

設定変更を手動で確認する前に、2度考えてください。

アプリケーションが特定の構成変更時のリソースを更新する必要はありません、あなたは活動の再起動を避けるためにあなたを必要とする性能限界を持っている場合は、あなたがあなたの活動は、構成の変更自体を処理することを宣言することができ、そのシステムがアクティビティーを再始動するのを防ぎます。

注:構成変更を処理すると、システムによって自動的に適用されないため、代替リソースを使用するのがはるかに難しくなる可能性があります。このテクニックは、構成の変更のために再起動を避けなければならない場合、最後の手段と考えるべきであり、ほとんどのアプリケーションでは推奨されません。

onSaveInstanceStateにいくつかのフラグを保存し、onCreateでsavedInstanceStateがあるかどうかを確認して、たとえばフィールドとして保存してみてください。これは、活動が「再作成された」かどうかに関する情報を提供します。次に、 'onResume'チェックでこのフラグがセットされているかどうかがチェックされます。そうでない場合は、あなたのアクティビティを再作成していないので、あなたは呼び出すことができます。scrollToNow()

+0

私はすでにそれを試したと思うが、その場合、正しく覚えていれば、オリエンテーションの変更以外の理由でアクティビティが破壊されたときでさえ、その旗が得られる。私はもう一度それを試みます。ありがとうございました! –

+0

OK、私はもう一度それをテストし、onCreateはBundleインスタンスでのみ、向きが変わった場合にのみ呼び出されます。私は次のようなケースをテストしました。新しいアプリの起動、ホームボタンの押し、アプリを殺す/しないでアプリに戻ります。だから私は試してみたときにいくつかの間違いをしたと思う。私は一度onResumeが実行されたときにフラグをリセットするのを忘れたと思う。 –

1

画面の向きの変更

は、あなたがそのようなあなたのAndroidManifest.xmlandroid:configChanges="screenLayout|screenSize|orientation"に次の行を追加しようとしましたしましたときに私はレイアウトを再作成したくない:

<activity 
     android:name="youractivity" 
     android:configChanges="screenLayout|screenSize|orientation" 
     android:label="@string/title_activity_create_note" 
     android:theme="@style/AppTheme" 
     android:windowSoftInputMode="stateAlwaysHidden" /> 

さらに詳しい情報については、manifest/activity-elementのページでandroid:configChangesセクションをご覧ください。

これを追加する場合は、Androidシステムの代わりに自分でメソッドを処理する必要があります。

そのページにセクションを注意し、慎重にお読みください:

注:この属性を使用するには、最後の手段としてのみ回避して使用する必要があります。構成が変更されたために再起動を正しく処理する方法の詳細については、Handling Runtime Changesを参照してください。

また、このアプリケーションを私のアプリケーションで使用していますが、これも試してみてください:android:screenOrientation="nosensor"そのページにも情報があります。

+0

私は 'android:configChanges'を使って試してみましたが、覚えているように古いバージョンのSDH?)。 3つすべてで、それは完全に動作します、ありがとう! –

+0

@OliverMeyer私はあなたの携帯電話の向きが変更されたときにその問題(?)に直面しているので、方向属性がなくなったと思います。また、私は私のアプリケーションで多分あなたもそれを試すことができます使用している別の方法を追加しました。 –

関連する問題