【发布时间】:2011-09-21 07:32:42
【问题描述】:
我正在从 URL 解析 XML 并显示它。我想在我的 XML 解析器方法解析 XML 并准备好显示时显示 ProgressDialog。我面临的问题是 ProgressDialog 之后没有显示任何数据,而是显示空白屏幕。
这是我的代码:
ArrayList<XMLItem> items= new ArrayList<XMLItem>();
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.mydata);
adapter= new MyAdapter(this, R.layout.customcell, items);
listView= (ListView) findViewById(id.ListView01);
listView.setAdapter(adapter);
final ProgressDialog dialog = ProgressDialog.show(this, "", "Loading. Please wait...", true);
Thread thread=new Thread(new Runnable(){
public void run(){
doTheAutoRefresh();
runOnUiThread(new Runnable(){
public void run() {
if(dialog.isShowing())
dialog.dismiss();
adapter.notifyDataSetChanged(); //this line throws an exception and if i comment this line, blank screen is shown
}
});
}
});
thread.start();
}
private void doTheAutoRefresh() {
handler.postDelayed(new Runnable() {
public void run(){
loadData(); // this is where you put your refresh code
doTheAutoRefresh();
}
}, 15000);
}
private void loadData(){
Document doc;
try {
doc = XMLReader.parseURL("my url to parse xml");
NodeList nl = doc.getElementsByTagName("l");
for(int i=0; i<nl.getLength(); i++){
NamedNodeMap np = nl.item(i).getAttributes();
String t= np.getNamedItem("htn").getNodeValue();
String sT= np.getNamedItem("atn").getNodeValue();
XMLItem item= new XMLItem(t, sT);
items.add(item);
}
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
此代码完美显示 ProgressDialog,但在进度对话框之后,它显示空白屏幕。请帮我解决这个问题。
谢谢
【问题讨论】:
-
关闭进度对话框后你想做什么,只是在 UI 线程上的代码。在 dialog.dismiss() 之后;它的适配器的 notifyDatasetChanged() 用于您的适配器。我认为您可能希望为此目的使用 AsyncTask。试试看。
-
什么时候将项目添加到适配器?
-
loaddata完成后你要setAdapter..
-
您已经设置了适配器,然后更改了数据,所以使用 notifydatasetchanged() 填充数据。
-
在 dialog.dismiss() 之后尝试在 runonUIThread 上使用 adapter.notifydatasetchanged();看看会发生什么?
标签: android android-progressbar