7

カーソルでデータを取得し、ウィンドウタイトルの設定など、画面にデータを入力する必要がありますonStart()onResume()

onStart()バックグラウンドではありますが、アクティビティの後にはすでに表示onStart()できるため、論理的な場所のように見えます。特に、管理されたダイアログで問題が発生し、これを再考しました。ダイアログが開いたままユーザーが画面を回転させ、との間で呼び出された場合。ダイアログがデータに基づく必要がある場合は、前にデータを持っている必要があります。onCreateDialog()onPrepareDialog() onStart()onResume()onResume()

私が正しければ、メモ帳の例で悪い例を示すのonStart()はなぜですか?http://developer.android.com/resources/samples/NotePad/src/com/example/android/notepad/NoteEditor.html NoteEditor.java 176行目( )を参照してください。onResume()title = mCursor.getString...

また、私のアクティビティが、カーソルが追跡しているデータを変更する別のActvity/Dialogを起動した場合はどうなりますか。最も単純な場合でも、前の画面(メインアクティビティのダイアログのリスナー)を手動で更新する必要があることを意味しますか、またはデータを更新しなくなったため、ContentObserverを登録する必要があります。 onResume()(もちろん2回更新できますが)?

基本的な質問だとは思いますが、最近のダイアログで驚いたことに、これに気づきました。

4

2 に答える 2

3

繰り返しますが、解決策はあなたに合ったものに依存します。

カーソルをアプリケーションごとに1回事前入力する場合(変更を気にしない場合は、onCreate()で実行できます)。このメソッドは、アプリプロセスが強制終了され、アプリが再起動された場合にのみ呼び出されます。

表示されているライフタイムが開始するたびにカーソルを事前入力する場合(ほとんどの場合、サービス/ブロードキャストがアクティビティを呼び出している場合は、onStart()を使用する必要があります。

アクティビティのフォアグラウンドライフサイクルごとにカーソルを事前入力する場合は、onResume()を使用する必要があります。したがって、一部の情報を変更するダイアログボックスまたは別のサブアクティビティがあり、カーソルをリロードする場合は、onResume()で行うのが最適です。この方法の欠点は、アクティビティがフォアグラウンドに来るたびにカーソルがリロードされることです。

これが明確になることを願っています

于 2011-01-09T00:48:54.223 に答える
2

NoteEditorに関する質問に答えるには、引用した行の上の行を見るだけで、次のように表示されます...

    // Requery in case something changed while paused (such as the title)
    mCursor.requery();

コメントはそれをすべて説明しているようです。私自身はメモ帳の例を試していませんが、作成者は、メモ帳が一時停止(および再開)されている間に変更から回復する機能を構築しているようです。

GSreeが説明しているように(私がこれを入力している間)、正しい答えも間違った答えもありません。それは、アクティビティのライフサイクルのどの時点で何をする必要があるかによって異なります。

于 2011-01-09T00:54:29.870 に答える