0

問題: 2 番目のアクティビティから戻ったときに、最初のアクティビティのリストビューに、2 番目のアクティビティによって行われたデータベースの変更が反映されません。(エミュレーターを満足させるために) コードに些細な変更を加えてアプリを再起動すると、リストビューは、最後のセッション中に行われた 2 番目のアクティビティによるデータベースの変更を正確に表示するようになりました。

アプリの根性:

MainActivity: extends Activity implements LoaderManager.LoaderCallbacks<Cursor>
=>onCreate: SimpleCursorAdapter set; getLoaderManager().initLoader(LOADER_ID, null, this)
=>onResume: super.onResume(); getLoaderManager().restartLoader(0, null, this)

…なんてことだ!問題があります: initLoader と restartLoader は異なるローダー ID を使用しています。

これは過去5時間私を困惑させました。なぜ私はこの質問を残しているのですか: 私の問題を解決しようとして、私はこの答えに出くわしませんでした (おそらく、誰かに探すように勧めるにはあまりにも骨の折れるものです) が、このユニークな方法でつまずく次の人のために、これが潜在的な答えです。

4

1 に答える 1

0

LoaderManager ID が initLoader と restartLoader で同じであることを確認してください。

Alex と CommonsWare による他のすべての投稿と、更新に失敗したリストビューの解決策を探しているときに遭遇する残りのすべての投稿に加えて、これはあなたに起こった可能性のある別のことです.

何が問題なのかを探しているときに、実装していないことにも気付きました: cursor.setNotificationUri(getContext().getContentResolver(), uri);

(アプリが非アクティブな場合でも、CursorLoader はどのようにビューを自動的に更新しますか? )

...コンテンツプロバイダーを実装する方法について私がフォローしていた2つの異なるチュートリアルには、プロバイダーのクエリメソッドに setContentNotificationUri がありませんでした。彼らはquerybuilderを使用しましたが、私は使用しませんでした(setContentNotificationUriがqueryBuilderに含まれている可能性がありますか?簡単な調査では、そうであることが示唆されていませんでした)。

于 2013-05-21T03:15:16.710 に答える