私はAsyncTask
ダウンロードと更新で同様の問題を抱えInfoWindow
ていました.
私はmymarker.showInfoWindow()
のメソッドを呼び出していました。これはメソッドを再呼び出ししましたが、ループに陥り、変更が正しく反映されませんでした。OnPostExecute()
AsyncTask
InfoWindowAdapter
私が使用した解決策は、現在選択されているマーカーと表示しInfoWindow
たいビューを保存することでした。TextView
が更新されている以下の例を取り上げましたDownloadBubbleInfo
AsyncTask
(あなたの画像スレッドに似ていると思います)。
// Setting a custom info window adapter for the google map
gMap.setInfoWindowAdapter(new InfoWindowAdapter() {
// Use default InfoWindow frame
public View getInfoWindow(Marker arg0) {
return null;
}
// Defines the contents of the InfoWindow
public View getInfoContents(Marker arg0) {
if (selectedMarker.isInfoWindowShown()) {
return infoWindowView;
} else {
// Getting view from the layout file info_window_layout
infoWindowView = getLayoutInflater().inflate(
R.layout.bubblewindowlayout, null);
// Stash the base view in infoWindowView
// Getting reference to the TextView to set latitude
TextView tvTit = (TextView) infoWindowView
.findViewById(R.id.tv_title);
tvTit.setText("Fetching data...");
// Async the update so we're not slowed down waiting for
// the
// bubble to populate
new DownloadBubbleInfo(context, infoWindowView, arg0)
.execute(arg0.getTitle(), arg0.getSnippet());
// Returning the view containing InfoWindow contents
return infoWindowView;
}
}
});
gMap.setOnMarkerClickListener(new OnMarkerClickListener() {
public boolean onMarkerClick(Marker marker) {
// When a marker is clicked set it as the selected marker so
// we can track it for the InfoWindow adapter. This will
// make sure that the correct marker is still displayed when
// the callback from DownloadBubbleInfo is made to
// marker.showInfoWindow() which is needed to update the
// InfoWindow view.
selectedMarker = marker;
infoWindowView = null;
return false;
}
});
そして、からの関連行DownloadBubbleInfo
AsyncTask
:
@Override
protected String[] doInBackground(String... queryparts) {
// Do the query and stash the results in queryResults and pass to
// onPostExecute to attach to the mainview (the current view from the
// main code) and then call showInfoWindow on the marker to re-launch
// the InfoWindowAdapter methods again to repopulate the InfoWindow view
// and attach it.
return queryResults;
}
protected void onPostExecute(String[] results) {
((TextView) mainview.findViewById(R.id.tv_title)).setText(results[0]);
((TextView) mainview.findViewById(R.id.tv_info)).setText(results[1]);
marker.showInfoWindow();
Log.i("Chris-Debug", "Reshowing InfoWindow");
}
これで、正しいマーカーにユーザーから返された正しい情報が入力されていることを確認できますAsyncTask
。Android API 用の非常に厄介な GoogleMaps v2 の別のコーナーを無事に迂回できました!