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() 方法放在进度条中时,它会显示加载圆圈,但是一旦加载完成。列表视图中不显示任何内容。但是如果我取出进度条代码(线程和运行方法),并简单地调用 setSelected() 方法,列表视图成功声明数据。到目前为止,它得出的结论是进度条代码正在做一些事情......所以想知道我是否遗漏了一些要添加或从代码中取出的东西。我需要显示进度条,因为我正在从在线资源中读取数据,这需要时间,这可能会让用户感到不舒服。

4

1 回答 1

1

问题可能是您试图从另一个线程更改用户界面,然后是 UI 线程,这在 Android 中是不可能的。

我建议尝试使用Async Task。Asynct Task 使您可以在后台线程中执行某些操作,并在完成后将结果发布到 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();
于 2010-07-26T14:02:42.070 回答