2011-04-02 93 views
0

在我的应用程序中,我有一个用户可以登录的屏幕。登录细节被发送到网络,一些数据被下载到微调器中。我为应用程序实现了一个进度对话框,以便应用程序在访问网络和下载时不会锁定应用程序。进度对话框似乎工作正常,但任务完成后似乎并没有更新我的微调 - 我实际上必须单击微调以显示已下载的数据。 notifyDataSetChanged()方法似乎不起作用,如果我没有任何线程,通常会默认显示第一个项目。这是一些代码。android线程 - 锁定UI?

这将启动progressdialog

pd = ProgressDialog.show(this, "Logging in...", "Please wait", true, false);  Thread thread = new 
Thread(this); thread.start(); 

run方法的代码 - 在这里微调数据集被改变

public void run() { 
    myMethodThatDoesStuff(); 
    handler.sendEmptyMessage(0); 
} 

和处理

private Handler handler = new Handler() { 
    @Override 
    public void handleMessage(Message msg) { 
     pd.dismiss(); 
    } 
}; 

最后,在该位myMethodThatDoStStuff改变微调数据集

aa=new ArrayAdapter<String>(this, 
           android.R.layout.simple_spinner_item); 
         //ADDING SOME DATA HERE 
//DATA ADDED 
         spin=(Spinner)findViewById(R.id.spinner); 
         spin.setOnItemSelectedListener(this); 
         aa.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item); 
         spin.setAdapter(aa); 
         aa.notifyDataSetChanged(); 

注:不穿这工作绝对没问题

回答

0

我建议使用的AsyncTask。

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

protected Long doInBackground(Void... void) { 
    doCalculation() ; 
    ....  
} 

protected void onPostExecute(Long result) { 
    ..... 
    pd.dismiss(); 
    aa.notifyDataSetChanged(); 
} 

}

+0

当我使用这个确切的同样的事情正在发生的事情里面。 – 2011-04-02 16:46:04

0

你可以称之为pd.setVisibility(View.GONE)隐藏微调,处理程序代码