infowindowadapter を使用して、Google マップの情報ウィンドウにデータを取得しようとしています。問題は、ある種の鶏と卵のタイプの問題です。onPostExecute は UI スレッドに配置する必要があるため、onPostExecute メソッド内に infowindowadapter を配置する必要があります。ただし、infowindowadapter 内から AsyncTask を使用してデータベースを呼び出す必要があります。誰もこれを経験していますか?ありがとう。
2 に答える
ただし、infowindowadapter 内から AsyncTask を使用してデータベースを呼び出す必要があります。
絶対違う。は のようなコールバックに非同期的に応答できないため、を呼び出す前にデータをロードしておく必要があります。setInfoWindowAdapter()
GoogleMap
InfoWindowAdapter
getInfoContents()
たとえば、クエリを実行して を呼び出す前にモデル データを取得し、サブクラスのコンストラクターに (またはその他setInfoWindowAdapter()
のもの) を渡します。Cursor
InfoWindowAdapter
onPostExecute メソッド内に infowindowadapter を配置する必要があります
いいえ、必要ありません。通常は で、GoogleMap.setInfoWindowAdapter
への参照を取得した後に呼び出します。後でどこかで更新する必要があるのはなぜですか? データで感じるパラメータを正しく使用して機能します。GoogleMap
Activity.onCreate
InfoWindowAdapter
View
Marker
infowindowadapter 内から AsyncTask を使用してデータベースを呼び出す必要があります
いいえ、これを行う必要はありません。そこではまったくそれをしないことをお勧めします。代わりに、マップに表示されるデータを保持するモデルを作成します。データを取得するために最初に呼び出したときにメモリ内にない場合、非同期ジョブを使用してデータをロードしますが、すぐに null を返します。また、このモデルにオブザーバーを設定し、ロードが完了すると通知され、Marker.showInfoWindow()
ロードされたデータを使用するために情報ウィンドウを更新します。あなたInfoWindowAdapter
は再び呼び出されますが、今回はメモリにキャッシュされたデータを取得します。
この回答も参照してください: Maps V2 InfoWindow の動的コンテンツ