0

我試圖在異步任務開始工作之前顯示「加載」對話框。使用下面的代碼會發生什麼情況是對話框沒有顯示,直到所有的異步任務完成他的操作,最後只會提示對話框。在asynctask之前顯示對話框

下面的代碼:

@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秒內,直到我能看到的佈局,這就是爲什麼我想用一個「加載提示用戶「對話框。但由於某種原因,用戶只能在異步操作結束時才能看到它。

我該怎麼辦?

編輯:忘了提及在onProgressUpdate我正在做一些UI操作(添加覆蓋到mapview)。這就是爲什麼UI可能會凍結。但我只想知道如何顯示加載對話框,我不關心在「加載」對話框顯示後UI是否凍結。其實我很在乎,但我不知道是否有更好的解決方案。

EDIT2:的loadmap功能:

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(); 

      } 
     }); 

} 
+2

顯示在'onPreExecute進度條()你'AsyncTask'的方法'和'onPostExecute()'方法 –

+0

是的,我同意@SiddharthLele – moDev

+0

@SiddharthLele我已經嘗試過了,我沒有駁回想法爲什麼用戶界面凍結..即使所有的操作都在asynctask線程上。 – idish

回答

-1

您是否嘗試過在移動loadMap()到的AsyncTask?

+0

我該怎麼辦? loadmap()與UI對象混淆。 – idish

相關問題