2012-05-08 3 views
0

私は特定の場所にあるすべてのレストランを一覧表示するアンドロイドアプリを設計しています。これは、アプリの起動時に発生します。 場所が変更されると、アプリが既に開いていてもレストランのリストが変更されます。 私がgoogleに乗せた例は、ボタンをクリックするだけでレストランを埋めることができます。しかし、私の場合は、起動時に起こり、アプリが既に起動されている場合は、場所によってはリストも変わるはずです。場所が変更されると、レストランのリストはボタンをクリックせずに自動的に変更されます。

私はAsyncTaskのサブクラスが存在するMainClassを作成しました。このサブクラスはLocationListenerを実装するクラスを持っています。 しかし、問題はこれです。場所が変更されたときに自動的に結果を取得するために、onLocationChangeでdoInBackground()メソッドを再度呼び出さなければなりません。

私は何をすべきですか?

+0

あなたの記事にコードサンプルを投稿し、どの部分が問題を引き起こしているのかを記述してください。 – Tim

答えて

0

メインクラスの場所の変更を聞きます。 (重要な)変更を受け取ると、レストランに問い合わせるasynctaskを開始します。結果(レストランの配列など)をonPostExecuteに渡し、それに従ってUIを更新します。

レストランのクエリ中に更新を無効にするか、クエリをキャンセルして新しい更新プログラムごとに新しいクエリを開始することがあります。

2

ユーザーロケーションを取得し、新しいレストランデータを収集するためのロジックをすべてServiceに入れてください。 Serviceは、新しいデータが必要な大幅な変更が発生したときはいつでも、あなたの場所の更新を聴くことができます(うまくいけば疎な間隔に設定されています)。AsyncTaskでリストを更新してください。

それは(onPause()onResume()方法の間で)フォアグラウンドでいたときにActivityしばらくの期間中にデータの更新がnotifyDataSetChanged()を呼び出すために表示されている場合は、最新の情報を取得し、コールバックとして登録することActivityServiceに結合することができ、あなたのリストに。

Serviceをローカルでバインドする方法の詳細については、hereを参照してください。

HTH

1

はレストランのリストについては、いくつかのArrayAdapterを使用し、場所は近くのレストランを盗んとonPostExecute ArrayAdapter内部リストを交換し、notifyDataSetChanged()を呼び出すためにAsyncTaskを使用して変更するたびに、それは、その後、メインクラスにインスタンスの保存します。

関連する問題