[英]Android Progress dialog before listview
我试图在显示列表视图之前进行进度对话框,因为下载了列表视图上的项目。
我得到这个是因为我试图用displayListView()更改线程中的listview;
02-08 00:25:48.959: W/System.err(3244): android.view.ViewRoot$CalledFromWrongThreadException: Only the original thread that created a view hierarchy can touch its views.
如果我将displayListView()放在线程之外,则会得到nullpointerexeption。 displayListView()使用被下载的fieldsList arraylist。 我试图等待myThread.isAlive,但是这样就不会显示progressdialog。 如何解决?
我的代码:
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.build_main);
final ProgressDialog dialog = new ProgressDialog(this);
dialog.setCancelable(true);
dialog.setMessage("Loading...");
dialog.setProgressStyle(ProgressDialog.STYLE_HORIZONTAL);
dialog.setProgress(0);
dialog.setMax(100);
dialog.show();
Thread myThread = new Thread(new Runnable() {
public void run() {
Builder builder = new Builder(server, user, password, BuildFieldsViewActivity.this, USER_AGENT);
Document doc = null;
doc = builder.DownloadPage("d.php?ne="+gyv_id);
fieldsList = builder.getKaimas(doc);
displayListView();
dialog.setProgress(100);
dialog.dismiss();
}
});
myThread.start();
}
必须从UI线程更新任何UI元素。 您正在从后台线程操纵对话框。 因此,发生了崩溃。
一个快速的解决方法是使用runOnUiThread(Runnable),在runnable内部,可以安全地更新任何UI元素。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.