2010-07-26 52 views
1

我在android中使用进度条,以便直到我的数据加载,用户得到正确的反馈。 的栏中的代码如下:使用进度条结束不填充列表视图

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中没有显示任何内容。但是,如果我取出进度条形码(线程和运行方法),并且只调用setSelected()方法,则listview会成功声明数据。 到目前为止它的结论是进度条代码正在做一些事情......所以想知道我是否错过了要添加或取出代码的内容。我需要展示进度条,因为我正在阅读来自在线来源的数据,这需要时间,这可能会让用户感到不舒服。

回答

1

问题可能是因为您试图从另一个线程更改Userinterface然后UI线程,这在Android中是不可能的。我建议尝试使用Async Task。 Asynct Task为您提供了在后台线程中执行某些操作并在UI线程完成后将结果发布到UI线程中的可能性。

为此,我将在两个方法中分离setSelected方法,一个获取数据并创建Array和其他所有内容,另一个创建适配器并将结果发布到列表中。

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(); 
+0

Janusz! 我使用U子告诉上面的方法,但是,搜索栏挂在加载代码是: 新的AsyncTask <太虚,太虚,太虚>(){// 这是在保护无效doInBackground(虚空背景 做... params){ setSelected(); 返回null; } //此UI在UI中完成线程 保护无效onPostExecute(长结果){ populateList(data); myProgressDialog.dismiss(); } } .execute(); 我想这个线程是悬空..这是?? – kaibuki 2010-07-29 11:07:19

+0

对不起,我需要更多的代码,然后在这里真正发现一个错误。尝试在原始问题中进行编辑 – Janusz 2010-07-29 12:27:09