Android 使用进度条的结果是不填充列表视图
我在安卓系统中使用了一个进度条,所以在我的数据加载之前,用户会得到一个关于正在发生的事情的适当反馈。 条形图的代码如下所示:Android 使用进度条的结果是不填充列表视图,android,multithreading,progress-bar,android-listview,Android,Multithreading,Progress Bar,Android Listview,我在安卓系统中使用了一个进度条,所以在我的数据加载之前,用户会得到一个关于正在发生的事情的适当反馈。 条形图的代码如下所示: final ProgressDialog myProgressDialog; myProgressDialog = ProgressDialog.show(ListingPage.this,"Please Wait", "Loading Date", true); new Thread() { public void run() { try{
final ProgressDialog myProgressDialog;
myProgressDialog = ProgressDialog.show(ListingPage.this,"Please Wait", "Loading Date", true);
new Thread() {
public void run() {
try{
setSelected();
sleep(5000);
} catch (Exception e) { }
myProgressDialog.dismiss();
}
}.start();
setSelected()方法将数据插入数组列表,然后创建数组适配器,然后使用列表视图显示这些项
因此,当我将setSelected()方法放在进度条中时,它会显示加载循环,但一旦加载完成。listview中不显示任何内容。但是如果我取出进度条形码(thread and run方法),并简单地调用setSelected()方法,listview就会成功地声明数据。
到目前为止,它的结论是,进度条码正在做一些事情…所以我想知道我是否缺少一些东西来添加或删除代码。我需要显示进度条,因为我正在从在线源读取数据,这需要时间,这可能会让用户感到不舒服。问题可能是您试图从另一个线程更改用户界面,然后是UI线程,这在Android中是不可能的 我建议试着使用一种新的方法。Asynct任务使您可以在后台线程中执行某些操作,并在完成后在UI线程中发布结果 为此,我将setSelected方法分为两种方法:一种是获取数据并创建数组和其他所有内容,另一种是创建适配器并将结果发布到列表
myProgressDialog = ProgressDialog.show(ListingPage.this,"Please Wait", "Loading Date", true);
final Result[] results = new Result[]();
new AsyncTask<Void, Void, Void>() {
//This is done in the background
protected Void doInBackground(Void... params) {
results = getResults();
return null;
}
//This id done in the UI Thread
protected void onPostExecute(Long result) {
publishResults();
myProgressDialog.dismiss();
}
}
}.execute();
myProgressDialog=ProgressDialog.show(ListingPage.this,“请稍候”,“加载日期”,true);
最终结果[]结果=新结果[]();
新建异步任务(){
//这是在后台完成的
受保护的Void doInBackground(Void…参数){
结果=getResults();
返回null;
}
//此id在UI线程中完成
受保护的void onPostExecute(长结果){
发表结果();
myProgressDialog.discouse();
}
}
}.execute();
问题可能是您试图从另一个线程更改用户界面,然后更改UI线程,这在Android中是不可能的
我建议试着使用一种新的方法。Asynct任务使您可以在后台线程中执行某些操作,并在完成后在UI线程中发布结果
为此,我将setSelected方法分为两种方法:一种是获取数据并创建数组和其他所有内容,另一种是创建适配器并将结果发布到列表
myProgressDialog = ProgressDialog.show(ListingPage.this,"Please Wait", "Loading Date", true);
final Result[] results = new Result[]();
new AsyncTask<Void, Void, Void>() {
//This is done in the background
protected Void doInBackground(Void... params) {
results = getResults();
return null;
}
//This id done in the UI Thread
protected void onPostExecute(Long result) {
publishResults();
myProgressDialog.dismiss();
}
}
}.execute();
myProgressDialog=ProgressDialog.show(ListingPage.this,“请稍候”,“加载日期”,true);
最终结果[]结果=新结果[]();
新建异步任务(){
//这是在后台完成的
受保护的Void doInBackground(Void…参数){
结果=getResults();
返回null;
}
//此id在UI线程中完成
受保护的void onPostExecute(长结果){
发表结果();
myProgressDialog.discouse();
}
}
}.execute();
Janusz!我使用了上面提到的方法,但是,加载代码时搜索栏挂起的代码是:new AsyncTask(){//这是在后台保护的Void doInBackground(Void…params){setSelected();return null;}//这是在UI线程保护的Void onPostExecute(Long result){populateList(data);myProgressDialog.disease();}.execute()中完成的id;我猜线程是悬空的。是吗?对不起,我需要更多的代码,然后这个来真正找到一个错误。试着在原始问题中编辑它Janusz!我使用了上面提到的方法,但是,加载代码时搜索栏挂起的代码是:new AsyncTask(){//这是在后台保护的Void doInBackground(Void…params){setSelected();return null;}//这是在UI线程保护的Void onPostExecute(Long result){populateList(data);myProgressDialog.disease();}.execute()中完成的id;我猜线程是悬空的。是吗?对不起,我需要更多的代码,然后这个来真正找到一个错误。尝试在原始问题中编辑它