17

インテントを開始すると、ライフサイクルの前に呼び出されるCameraことに気付きました。onActivityResultonResumefragment

onActivityResultまた、 after が呼び出されていることに気付きましたonStart

しかし、ここに奇妙な部分があります。変数 fileUri == "some image path" があります。この変数は

  • onStart では NOT NULL。
  • onActivityResult の NULL
  • onResume で再び NOT NULL

logCat を参照

12-03 14:39:42.418: D/Fragment1(29220): onStart fileUri: file:///mnt/sdcard/OPS_IMAGES/IMG_20121203_143933.jpg
12-03 14:39:42.463: W/PhoneWindow(29220): Previously focused view reported id 2131034140 during save, but can't be found during restore.
12-03 14:39:42.463: D/Fragment1(29220): onActivityResult fileUri is NULL!!!
12-03 14:39:42.468: D/Fragment1(29220): onResume fileUri: file:///mnt/sdcard/OPS_IMAGES/IMG_20121203_143933.jpg

最悪の部分は、これが 50% の確率でしか発生しないことです。別の 50% onActivityResult は fileUri 値に問題なくアクセスできます...

これをどのようにデバッグすればよいですか?

注: 簡単にするために、onResume、onStart、onActivityResult メソッドのコードは含めませんでした。これらは、変数チェックとログ呼び出しを伴う基本的な方法です。必要に応じて、質問を編集してこれらのメソッドを追加します。

注 2: Google サポート ライブラリを使用して、古い API バージョンのフラグメントをサポートしています。

4

2 に答える 2

7

元の質問に答えるために、ライフサイクル コールバックの順序を次に示します。

12-09 16:38:41.800 10227-10227/org.Test I/Fragment: ## OnStart()
12-09 16:38:41.820 10227-10227/org.Test I/Fragment: ## OnActivityResult()
12-09 16:38:41.821 10227-10227/org.Test I/Fragment: ## OnResume()
于 2016-12-09T14:43:02.833 に答える
1

これは私がいじくり回している領域でも問題でもありませんが、何らかの理由で変数が表示されない場合は...値を参照するために別のタイプの方法を使用してみましたか?

私の提案は、SharedPreferences変数を使用して、そこにある値をエディターに保存し、それを引き出すことです。これは最善の解決策ではないかもしれませんが、今のところ回避策かもしれません。

logcatからも同様のエラーメッセージが表示されました。これが、あなたの投稿に出くわした方法です。

"01-27 11:13:42.899: W/PhoneWindow(1591): Previously focused view reported id 16908862 during save, but can't be found during restore."

問題を修正することができた方法は、「空白コンストラクター」がフラグメントを再インスタンス化していないことでした。フラグメントには、ユーザーが選択したアイテムを選択したときにアクティビティに返される「ID」である変数が1つだけあります。渡された値を使用して通常のコンストラクターを呼び出すことにより、フラグメントを単純に再インスタンス化しました。

例えば。

public UIDialogFragmentVolume() {
    this(ID);
}

public UIDialogFragmentVolume(int typeID) {
    ID = typeID;
}

これが問題の特定と修正に役立つことを願っています。

于 2013-01-27T00:20:37.053 に答える