0

非同期タスクが機能し始める前に、「読み込み中」ダイアログを表示しようとしています。次のコードでは、すべての非同期タスクが操作を完了するまでダイアログが表示されず、最後にのみダイアログが表示されます。

コードは次のとおりです。

    @Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_map);
    loadMap();
    progressBar = ProgressDialog.show(Map.this, "", 
            "Loading. Please wait...", true);

    //firing the asynctask here
}

asynctask はかなり重い操作を行っています。レイアウトが表示されるまでに 10 秒ほどかかります。そのため、ユーザーに「読み込み中」ダイアログを表示する必要があります。しかし、何らかの理由で、ユーザーは asynctask 操作の最後にしかそれを見ることができません。

私は何をすべきか?

編集: onProgressUpdate でいくつかの UI 操作を行っていることを忘れていました (マップビューにオーバーレイを追加する)。そのため、おそらく UI がフリーズしています。「読み込み中」ダイアログが表示された後にUIがフリーズしてもかまいません。実際には気になりますが、より良い解決策があるかどうかはわかりません。

EDIT2 :ロードマップ機能:

    public void loadMap()
{

        mapView = (TapControlledMapView) findViewById(R.id.mapview);
        mapView.setBuiltInZoomControls(true);
        mapController = mapView.getController();
        mapController.animateTo(new GeoPoint((int)(47.975 * 1E6), (int)(17.056 * 1E6)));
        mapView.setOnSingleTapListener(new OnSingleTapListener() {      
            @Override
            public boolean onSingleTap(MotionEvent e) {
                itemizedOverlay.hideAllBalloons();
                return true;
            }
        });
        myLocationOverlay = new FixedMyLocationOverlay(this, mapView);
        mapView.getOverlays().add(myLocationOverlay);
        mapView.invalidate();
        zoomToMyLocation();

        editText = (EditText)findViewById(R.id.search);
        editText.setOnFocusChangeListener(new OnFocusChangeListener() {

            @Override
            public void onFocusChange(View v, boolean hasFocus) {
                if(hasFocus)
                onSearchRequested();
                EditText editText = (EditText)v;
                editText.clearFocus();

            }
        });

}
4

1 に答える 1

-1

loadMap()asynctask に移動しようとしましたか?

于 2012-09-29T16:20:14.447 に答える