Заполнение карты в AsyncTask требует касания экрана, чтобы увидеть точки

У меня проблема с просмотром карты — я заполняю ее с помощью AsyncTask, но после ее завершения точки не отображаются до тех пор, пока экран не будет нажат (после первого касания все точки отображаются правильно).

При создании:

dialog = ProgressDialog.show(MyMap.this, "Заполнение карты", "Подождите...", true);

новый AddOverlays().execute();

Моя асинхронная задача:

class AddOverlays extends AsyncTask <Void, Void, String>{
        @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();
        }
    }

person bMon    schedule 27.10.2011    source источник
comment
Используете ли вы AsyncTask в качестве внутреннего класса в своем MapActivity или используете Service для выполнения задачи? Если да, то как вы передаете ссылку MapView в намерении, поскольку она не сериализуема?   -  person JJD    schedule 18.07.2012


Ответы (1)


Попробуйте вызвать: invalidate() из потока пользовательского интерфейса или postInvalidate() из другого потока.

на вашем объекте MapView, чтобы перерисовать вид карты.

Вы должны вызвать mapOverlays.add(itemizedOverlay); в onPostExecute(String sResponse), так как добавление нового наложения не является дорогостоящей операцией.

Я предполагаю, что вы будете выполнять какую-то дорогостоящую операцию в doInBackground(Void... unused), потому что на данный момент вам не нужна вся задача AddOverlays.

person Tomasz    schedule 27.10.2011
comment
У меня было добавление в onPostExecute, но это не помогло, поэтому я вернулся (верну его обратно). Да, в doInBackground происходит много тяжелой работы. RE: недействительный или PostInvalidate - вы имеете в виду onCreate этого представления карты? Не могли бы вы привести пример? - person bMon; 28.10.2011
comment
Могу ли я добавить postInvalidate в onPostExecute? Если да, то как? - person bMon; 28.10.2011
comment
onPostExecute() просто вызовите mapView.invalidate(), где переменная mapView является ссылкой на ваш объект MapView :) - person Tomasz; 28.10.2011