0

1 つのフラグメントに注文のリストがあります。2 番目のフラグメントでは注文の詳細を表示し、3 番目のフラグメントでは注文のステータスを変更するボタンを表示します。

リストでは、各注文はステータスを示す背景色で表示されます。たとえば、配達が完了した場合は緑になります。

ランドスケープ モードでは、詳細とリストの両方が表示されます。ポートレート モードでは、2 つの別々のアクティビティを使用します。

注文のステータスを変更するまで、これはすべて正常に機能します。リストを更新する方法が見つかりません。

私が理解しているように、何が起こる必要があるかは、アダプターがその notifyDateChanged() メソッドを呼び出す必要があることです。ボタンのクリックを処理するメソッドから直接呼び出してみたり、asynctask を試したり、ハンドラーを試したりしました。私のデバッグ メソッドは、呼び出しが行われていることを示していますが、リストは更新されません。

私が完全に骨の折れる何かをしている可能性はありますが、私は物事を二重および三重にチェックしました。私が理解していないいくつかの重要な要素があると思います。他の誰かがそうして、私が欠けているものを教えてくれることを願っています。

いくつかのコードを投稿しましたが、明らかに間違っていました。これはコーディングの問題というよりも概念的な問題だと思うので、どのコードを投稿すればよいかわかりません。

4

2 に答える 2

0

ビューを更新したい場合は、以下を使用してみてください:

  1. スレッド + ハンドラー

  2. 非同期タスク

于 2013-04-25T02:03:01.667 に答える
0

他の投稿者の有益なコメントを通じて私が発見したことは、私の問題は、アダプターが正しいスレッドで notifyDataChanged() 呼び出しを取得していないことではなかったということです。それを証明するデバッグコードを入れました。問題は、リストビュー項目の背景が基になるデータ自体の変更に基づいていたため、実際の解決策はアダプターにカーソルを更新させることでした。私はいくつかの変更を加えました。アダプターに通知するために使用していた AsyncTask を変更しました。AsyncTask は新しいカーソルを取得し、その結果で adapter.changeCursor(cursor) を呼び出します。AsyncTask は、ステータスが変更されると、MainActivity (リスト フラグメントと詳細フラグメントの両方をホストする) から呼び出されます。ListFragment コードの onResume() 部分でも呼び出されるため、詳細フラグメントから戻ったときにリストが適切に更新されます。よく働く。

于 2013-04-28T17:27:16.570 に答える