2011-04-02 90 views
2

我有一個使用asyncTask和progressdialog執行的方法。執行此方法後,它會在屏幕上更改一些內容 - 微調控件和文本視圖。在我的方法中,我用新數據更新它們。我知道該方法運行完美,並且正在按照應有的方式進行,因爲當我按下微調器上的箭頭時,新數據就在其中。在方法內部調用setText()和notifyDataSetChanged() - 這些似乎並沒有更新屏幕。將notifyDataSetChanged()添加到我的異步任務的onPostExecute()似乎也沒有做任何事情。異步任務沒有更新屏幕

任何想法出了什麼問題?

這是我的代碼

myMethod的()

aa=new ArrayAdapter<String>(this, android.R.layout.simple_spinner_item); 
         for(Object tmpObject:objects){ 
          aa.add(tmpObject.getName()); 
         } 
         spin=(Spinner)findViewById(R.id.spinner); 
         spin.setOnItemSelectedListener(this); 
         aa.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item); 
         spin.setAdapter(aa); 
         aa.notifyDataSetChanged(); 
         txt=(TextView)findViewById(R.id.txt); 
         txt.setText("Woohoo!"); 

我的AsyncTask

class loginTask extends AsyncTask<Void, Void, Void> { 
    protected void onPreExecute() { 
      pd = ProgressDialog.show(login.this, "Logging you in...", "Please wait", true, false); 
      } 

    @Override 
    protected Void doInBackground(Void... unused) { 
     myMethod(); 
     return null; 
    } 
     protected void onPostExecute(Void unused) { 
     pd.dismiss(); 




    } 
} 

爲什麼心不是在progressdialog後,屏幕更新完了?它更新就好了,如果我不使用asyncTask。將notifyDataSetChanged()添加到postexecute也不會執行任何操作。

回答

8

doInBackground方法不在UI線程中,所以如果你想做UI更新,你應該在onProgressUpdate或onPostExecute中做。

+0

得到這個工作,謝謝。 – 2011-04-02 18:01:38

2

doInBackground - 方法將在後臺線程上執行,所以它不能嘗試與UI對象進行交互。你不能在這裏執行txt.setText(「Woohoo!」);等等。