2012-06-20 41 views
0

我有按鈕,用戶選擇,我彈出一個AlertDialog OK或取消操作取代一些數據。我想出了它的一個ASYNCH過程後,OK和CANCEL工作正常。 我甚至停止多次點擊。但是,當用戶按下「確定」時,我必須將這些信息與一些任務一起保存到內存中。 OK過程大約需要三秒鐘,這是不耐煩的人的邊緣。我想用消息拋出一個不確定的進度條。然而,我對Java和android的新鮮感正在阻礙之中。 下面代碼中的「上下文」究竟是什麼?ProgressDialog麻煩

public void getData(final View v) 
{ 
    if(AlertDialogProcessing==0) 
    { 
     final String title="Set Image to Wallpaper"; 
     final String message="Press OK to set as Wallpaper or CANCEL"; 
     final String ok="OK"; 
     final String cancel="CANCEL"; 
     final AlertDialog.Builder alertbox = new AlertDialog.Builder(this); 
     try{ 
       alertbox.setMessage(message); 
       alertbox.setTitle(title); 
       alertbox.setPositiveButton(ok,new DialogInterface.OnClickListener(){ 
        public void onClick(DialogInterface arg0, int arg1) 
        { 
         Vibrate(ClickVibrate); 
         Drawable drawable= getSun(imageSelect); 
         ProgressDialog dialog = ProgressDialog.show(context, "Loading", "Please wait...", true); //<<<<<<<<<<ERROR at context 
         AlertDialogProcessing=1;  
         SaveData(drawable,1); 
         AlertDialogProcessing=0; 
         dialog.dismiss(); 
         Toast.makeText(getApplicationContext(), "Data Saved.",Toast.LENGTH_LONG).show();  
        } 
       }); 

       alertbox.setNegativeButton(cancel,new DialogInterface.OnClickListener(){ 
        public void onClick(DialogInterface arg0, int arg1){ 
         AlertDialogProcessing=0; 
         Vibrate(ClickVibrate); 
        } 
       }); 
       //alertbox.setCanceledOnTouchOutside(false); // maybe a 4.0 problem 
       alertbox.show(); 
     } catch(Exception e){ 
       //TODO Handle BadTokenException.  
     } 
    } 
} 

回答

1

onClick()中,您正在創建progressDialog,並且您正在UI線程上執行saveData()活動。你可以做的是在OnClick()onPreExecute()中創建AsyncTask顯示對話框,在doInBackground()中執行保存操作,在中關閉對話框。

語境下的定義是(按照Android開發者網站):

接口有關的應用程序環境的全局信息。 這是一個抽象類,其實現由Android系統提供。它允許訪問特定應用的資源和 類,以及向上調用應用程序級的操作,如 開展活動,廣播和接收意圖等

希望的解釋有所幫助。

+0

似乎Android需要一個允許程序員口授的管理程序 – user1445716

+0

似乎Android需要一個允許程序員有時口述命令的管理程序。我已經完成了並行和線程編程,異步似乎是兩者的結合,也是兩者的頭痛。事實證明,我以3秒的懲罰保存數據的擔憂並沒有被我交給pgm的隨機人員注意到。我將不得不添加異步到我的工具箱下載文件。實際上,我發現google android exampleless引用沒有什麼幫助。感謝這裏的努力。 – user1445716

0

這方面是你的活動調用進程的背景下dialog.So應該YourActivity.this

1

如果你正面臨着越來越方面的問題,您可以簡單地更換,

ProgressDialog dialog = ProgressDialog.show(context, "Loading", "Please 
    wait...", true); 

用,

ProgressDialog dialog = ProgressDialog.show(v.getRootView().getContext(), "Loading", "Please 
    wait...", true); 

這裏,v.getRootView()的getContext();指的是在getData()方法中傳遞的View對象的上下文。

+0

要求將'v'設置爲final。 – user1445716

+0

要求將'v'設置爲final。 progressDialog從不顯示,因爲它被解散。所以仍然是一個問題。行爲是OK保持突出顯示(因爲它保存數據)。確定/取消警報消失,吐司顯示保存已完成。仍然延遲3-4秒,因爲它掛在確定/取消。如果我註釋掉progressdialog消失,它會執行progressdialog(當然,它仍然處於等待加載狀態)。所以它的異步性導致它在數據保存之後被處理,並且在沒有顯示的情況下被解散。有什麼幫助嗎? – user1445716