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では不可能です。

非同期タスクの使用を試してみることをお勧めします。非同期タスクを使用すると、バックグラウンドスレッドで何かを実行し、実行後にUIスレッドで結果を公開することができます。

このために、setSelectedメソッドを2つのメソッドに分けます。1つはデータを取得して配列とその他すべてを作成し、もう1つはアダプターを作成して結果をリストに公開します。

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 に答える