0

リストビューでアイテムをクリックすると進行状況バーを表示したいと考えています。DetailActivity で同期が行われ、完了するまでプログレス バーが表示されます。

以下は、リスト項目を含む ListActivity のコードです。

listView.setOnItemClickListener(new OnItemClickListener()
  {
     public void onItemClick(AdapterView<?> a, View v, int position, long id)
    {    
       Intent intent = new Intent(ListActivity.this, DetailActivity.class);
       intent.putExtra("position", position);
      intent.putExtra("sk",(adapter.getSK(position)));
      ListActivity.this.startActivityForResult(intent, REQUEST_DETAIL);
}

誰でもこれで私を助けてください。

これは、使用しているprogressdialogのコードです。

ProgressDialog progressBar = new ProgressDialog(v.getContext());
progressBar.setCancelable(true);
 progressBar.setMessage("Loading...");
progressBar.setProgressStyle(ProgressDialog.STYLE_SPINNER);
progressBar.setIndeterminate(true);

progressBar.setProgress(0);
progressBar.setMax(100);
progressBar.show();
//reset progress bar status
progressBarStatus = 0;

new Thread(new Runnable() {
 public void run() {

while (progressBarStatus < 100) {
progressBarStatus=i;    
  // process some tasks
    i=i+20;
  // your computer is too fast, sleep 1 second

if(progressBarStatus==40)
{
  // Synchronizing

}
try {
Thread.sleep(1000);
 } catch (InterruptedException e) {
e.printStackTrace();

System.out.println("the error is"+e);
  }

  // Update the progress bar
 progressBarHandler.post(new Runnable() {
public void run() {
 progressBar.setProgress(progressBarStatus);
}
 });
}

if (progressBarStatus >= 100) {

// sleep 2 seconds, so that you can see the 100%
try {
Thread.sleep(500);

    } catch (InterruptedException e) {
e.printStackTrace();
}

// close the progress bar dialog
progressBar.dismiss();
}
  }
   }).start();

このコードでは、次の例外が発生します。

android.view.ViewRootImpl$CalledFromWrongThreadException: Only the original thread that created a view hierarchy can touch its views.
4

1 に答える 1

0

これには を使用AsyncTaskします。そこで を使用しonProgressUpdateて、ダイアログの進行状況を更新できます。ダイアログは UI スレッドで実行されるため、カスタム スレッドから変更しようとすると例外が発生します。

詳細/例については、この投稿を確認してください。

于 2013-05-23T11:41:10.390 に答える