2011-04-02 62 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!”);等等。