AsyncTaskでマップに値を設定すると、ポイントを表示するために画面をタッチする必要があります

私は私のマップビューに問題があります - 私はAsyncTaskでそれを設定しますが、完了した後、ポイントが画面がタップされるまで(最初のタッチの後にすべてのポイントが正しく表示されます)表示されません。

作成:

dialog = ProgressDialog.show(MyMap.this、 "Populating Map"、                 "しばらくお待ちください..."、本当);

     

新しいAddOverlays()。execute();

私のAsyncTask:

class AddOverlays extends AsyncTask {
        @Override
        protected String doInBackground(Void... unsued) {

                //do my looping work to add items to map

            mapOverlays.add(itemizedOverlay);   

            String nothing = "";
            return nothing;
        }

        @Override
        protected void onProgressUpdate(Void... unsued) {

        }

        @Override
        protected void onPostExecute(String sResponse) {
            if (dialog.isShowing())
                dialog.dismiss();
        }
    }
2
AsyncTaskMapActivity の内部クラスとして使用するか、タスクを実行するためにサービスを使用していますか?その場合、 MapView の参照は、シリアル化されていないため、インテントでどのように渡しますか?
追加された 著者 JJD,

1 答え

電話してみてください: UIスレッドから invalidate() または 別のスレッドの postInvalidate()

マップビューを再描画するために、MapViewオブジェクトに追加します。

新しいオーバーレイを追加するのは高価な操作ではないため、 onPostExecute(String sResponse)mapOverlays.add(itemizedOverlay); を呼び出す必要があります。

今のところAddOverlaysタスク全体が本当に必要ないので、あなたは doInBackground(Void ... unused)で何らかの高価な操作を行うと思います。

2
追加された
私はonPostExecuteのaddを持っていましたが、それは解決しなかったので私は戻ってきました(それを元に戻します)。はい、doInBackgroundには重い持ち上げがたくさんあります。 RE:invalidateまたはPostInvalidate - このマップビューのonCreateを意味しますか?例を挙げていただけますか?
追加された 著者 bMon,
postInvalidateをonPostExecuteに追加できますか?もしそうなら、どのように?
追加された 著者 bMon,
了解、ありがとう。
追加された 著者 bMon,
onPostExecute()mapView.invalidate()を呼び出します。ここで、mapView変数はMapViewオブジェクトへの参照です。
追加された 著者 Tomasz,