我的ListActivity有问题,我使用一个线程来显示ProgressDialog,其中获取所有已安装应用程序的列表。我把它变成一个列表适配器,而不是我想设置活动的listadapter,但我不能从线程中做到这一点。
我收到以下错误:ERROR/AndroidRuntime(14429): android.view.ViewRoot$CalledFromWrongThreadException: Only the original thread that created a view hierarchy can touch its views.
progressDialog = new ProgressDialog(this);
progressDialog.setProgressStyle(ProgressDialog.STYLE_SPINNER);
progressDialog.setMessage("Loading...");
progressDialog.show();
new Thread() {
public void run() {
showList(); // the method where i get all the apps and have the setListAdapter(); method
progressDialog.dismiss();
}
}.start();
如何获取它,以便我可以在我的线程中使用setListAdapter
答案 0 :(得分:2)
最简单的方法是使用Activity的runOnUiThread
方法:
runOnUiThread(new Runnable() {
public void run() {
showList();
progressDialog.dismiss();
}
});
修改:将线程更改为Runnable
答案 1 :(得分:2)
我解决了它,通过使用Handler我设法从线程中获取setListAdapter并仍在等待Thread执行该方法。
final Handler h = new Handler(){
public void handleMessage(Message msg) {
setListAdapter(appsAdapter);
}
};
new Thread() {
public void run() {
showList();
progressDialog.dismiss();
h.sendEmptyMessage(0);
}
}.start();