2011-03-08 47 views
0

我現在正在開發一個android應用程序,其中我需要在完成一些處理後顯示文本。 我正在使用線程在後臺運行進程,同時向用戶顯示進度對話框。該線程正常工作,我一步一步地跟着它,顯然,它也很好;然而,我稱它爲止的方法似乎並沒有結束(至少在正常循環中),因爲我後來設置的文本會立即顯示,我必須等待並執行其他一些操作(如按順序它顯示任務沒有完成和禁止TextView被更新

下面是一塊的,我遇到的麻煩代碼:

private OnClickListener saldoDisp = new OnClickListener(){ 
    public void onClick(View v){ 
     int x = s2.getSelectedItemPosition(); 
     branchSel = arrSucsId[x]; 
     mainProc(); 
      saldoAdminTex.setText(strSaldo); //The late one 
    } 
};  

public void mainProc(){ 
    chekP = new Thread (null,doProc,"Background"); 
    chekP.start(); 
    mProgress =ProgressDialog.show(SivetaAsaldo.this, "","Obteniendo saldo...",true, false);  
} 

private Runnable doProc = new Runnable(){ 
    public void run(){ 
     if(getSaldoAdmin(levelSel,branchSel)) 
     { 
      mProgress.dismis(); 
        Log.i(TAG,"Task completed properly"); 
     }else  
      handler.post(tosti); 
    } 
}; 

所以我得到了「任務正確完成」,但似乎仍然等待別的東西,任何蛛絲馬跡傢伙? 感謝您抽出一點時間來檢查它=)。

+0

太好了! AsyncTask是肯定的路要走=)謝謝你們! – 2011-03-10 18:39:08

回答

0

關於您的ProgressDialog,請參閱this answer關於如何使用AsyncTaskProgressDialog

1
saldoAdminTex.setText(strSaldo); //The late one 

將立即被調用。它不會等到mainProc中的Thread開始結束之後。您也不能關閉可運行的進程對話框。你只能在主UI線程上做UI相關的事情。

這將幫助您閱讀Android Dev站點上Painless Threading的文章。

+0

確實如此,我會查看這篇文章並解決這個問題=)謝謝! – 2011-03-09 22:30:05

0

看你的代碼,這樣的:

saldoAdminTex.setText(strSaldo); 

之前,你的線程完成的線程將在平行於線運行將可能被執行。

另一種方法是這樣:

public void mainProc(){ 
    mProgress =ProgressDialog.show(SivetaAsaldo.this, "","Obteniendo saldo...",true,false); 
    handler.post(new Runable(){ 
    public void run(){ 
     if(getSaldoAdmin(levelSel,branchSel)) 
     { 
      mProgress.dismis(); 
      saldoAdminTex.setText(strSaldo); 
      Log.i(TAG,"Task completed properly"); 
     }else  
      handler.post(tosti); 
    } 
}); 
} 
+0

羅比的權利,你不能在其他地方改變UI元素。在這個例子中, – 2011-03-09 22:30:52

+0

handler.post()將runnable發佈回UI線程。 – longhairedsi 2011-03-09 23:57:20