android线程 - 锁定UI?
问题描述:
在我的应用程序中,我有一个用户可以登录的屏幕。登录细节被发送到网络,一些数据被下载到微调器中。我为应用程序实现了一个进度对话框,以便应用程序在访问网络和下载时不会锁定应用程序。进度对话框似乎工作正常,但任务完成后似乎并没有更新我的微调 - 我实际上必须单击微调以显示已下载的数据。 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();
注:不穿这工作绝对没问题
答
我建议使用的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();
}
}
答
你可以称之为pd.setVisibility(View.GONE)
隐藏微调,处理程序代码
当我使用这个确切的同样的事情正在发生的事情里面。 – 2011-04-02 16:46:04