2

アプリで発生している奇妙な問題に気づきました。アプリを実行しているときに、アプリを最小化してから設定に移動して言語を変更し、アプリを再開すると(注:これは最小化/再開であり、終了/開始ではありません)、をonCreate()呼び出す代わりにアクティビティを呼び出しonResume()ます。

これは、特にビューでフラグメントを使用している領域で、多くの問題を引き起こしています。表示されているフラグメントは古いフラグメントですが、それらが保持しているアクティビティ参照はですnull。そのgetActivity()ため、再開直後は機能せずNullPointerException、多くの場所で発生します。

私のアプリはAndroid4.0.4以降用に構築されており、さまざまなデバイスやエミュレーターでこの問題に気付いたので、プラットフォームの問題ではありません。

onResume()理想的には、想定どおりに電話をかけたいと思います。そうでない場合は、アプリのクラッシュに直面するのではなく、アプリケーションをサイレントに再起動して、ユーザーをホーム画面に表示することをお勧めします。

アプリ自体は、英語(米国)という1つの言語のみをサポートしています。

誰かが以前にこの問題に直面したことがありますか?はいの場合、それを解決することができますか?

編集:クラススタッカーの回答に基づいて、構成の変更を自分で処理する必要があるようです。例外がそれ自体でスローされることを除いて、これは問題ないはずonCreate()です。私はで呼んgetWindow().setRequestFeature(Window.FEATURE_INDETERMINATE_PROGRESS)でいonCreate()ます。ロケートが変更されると、この行は、これRuntimeExceptionを前に呼び出す必要があるというメッセージをスローしsetContentView()ます。

これは、私のアクティビティが適切に破棄されていないことを意味しますか?

4

3 に答える 3

3

これは問題ではなく、仕様によるものです。

言語が変更された場合、それは画面の回転と同じように構成の変更です。

つまり、かなり多くのものを再作成する必要があります。したがって、これはonCreate()を介して処理されます。

悪いニュースで申し訳ありませんが、オブジェクトを作成する場所と、onCreateおよびonResumeの相互運用方法を修正する必要があります。

ここを参照してください。

編集:安全のために、チャット中にわかったように、前RuntimeExceptionに電話してください。getWindow().setRequestFeature(Window.FEATURE_INDETERMINATE_PROGRESS)super.onCreate(savedInstanceState)

于 2013-03-05T09:12:47.863 に答える
1

これらの行をマニフェストファイルに入れて、機能するかどうかを確認します。

    <activity
        android:name="youractivity"
        android:configChanges="locale|layoutDirection"
        android:label="youractivitylabel" />
于 2014-06-26T13:29:33.020 に答える
0

ロケールを変更した後、フラグメントでnullポインタ例外が発生するという同じ問題がありました。将来の参考のために、私の場合に役立つと思った解決策を共有します。フラグメントに次のonCreateView()行を追加するだけです。

this.setRetainInstance(true);

onDestroy()これにより、との呼び出しが防止されonCreate()ます。代わりに、onDetach()onAttach(Activity)呼ばれます。それは私を助けました、それがこのページに来る他の人を助けるかもしれないことを願っています。参考資料を参照してください。

于 2017-03-05T16:54:30.120 に答える