2

onclickが読み取り、RSSニュースのリストをユーザーに表示するボタンがあります。ロードが完了するまでプログレスバーを追加したいと思います。私の問題は、バーを追加すると最初は正常に機能するのに、戻るボタンを押すとバーが再開して停止できないことです。プログレスバーを示すヘルプやチュートリアルをいただければ幸いです。ありがとう!

ProgressBar myProgressBar;
  int myProgress = 0;

 /** Called when the activity is first created. */
 @Override
 public void onCreate(Bundle icicle) {
  super.onCreate(icicle);
  setContentView(R.layout.main1);

  Button nea = (Button) findViewById(R.id.nea);
   nea.setOnClickListener(new View.OnClickListener() {
   public void onClick (View view) {
    setContentView(R.layout.bar);

     myProgressBar=(ProgressBar)findViewById(R.id.bar);

           new Thread(myThread).start();

    Intent myIntent = new Intent(view.getContext(), nea.class);
    startActivityForResult(myIntent, 0);
    }  
  });
}

private Runnable myThread = new Runnable(){    
    @Override
    public void run() {
     // TODO Auto-generated method stub
     while (myProgress<100){
      try{
       myHandle.sendMessage(myHandle.obtainMessage());
       Thread.sleep(1000);
      }
      catch(Throwable t){
      }
     }
    }

    Handler myHandle = new Handler(){

     public void handleMessage(Message msg) {
      // TODO Auto-generated method stub
      myProgress++;
      myProgressBar.setProgress(myProgress);
     }
    };
      };
4

3 に答える 3

1

問題は、myProgress変数を復元しないことです。onCreate()の先頭で0に設定します。

@Override
 public void onCreate(Bundle icicle) {
  super.onCreate(icicle);
  setContentView(R.layout.main1);
  myProgress = 0; // <--- notice that statement.
  ...
 }

また、バックグラウンド作業にはAsyncTaskを使用することをお勧めします。こちらの例をご覧ください。

于 2011-02-01T14:28:10.917 に答える
1

実際、私はこれをで実装しAsyncTaskます。ここで、でプログレスバーを開始しonPreExecute()、でキャンセルしてonPostExecute()、でダウンロードを実行しますdoInBackground()。プログレス値を更新する場合はpublishProgress()doInBackground()プログレスバーで更新できます。onProgressUpdate()

https://github.com/pilhuhn/ZwitscherA/blob/master/src/de/bsd/zwitscher/TweetListActivity.java#L328 は、これらのメソッドを使用し、プログレスバー(pg可変)。

于 2011-02-01T14:28:50.310 に答える
0

コードが期待どおりに機能していないようです。このアクティビティと次のアクティビティの間にプログレスバーを表示したいとします(私の仮定)。コードが現在どのように機能しているかに基づいて、現在のアクティビティが約100秒間進行状況バーを表示するスレッドを開始するように見えますが、同時に2番目のアクティビティをロードしています。したがって、100秒が経過する前に戻るボタンを押すと、元のアクティビティに戻り、進行状況バーが表示されたままになります。

一般的に、アクティビティ間でプログレスバーが必要になるとは思いません。アクティビティ間は非常にスムーズに入れ替わるはずだからです。私は通常、アクティビティを完全にレンダリングする前に、プログレスバーを使用してデータをロードします。

たぶん、ProgressBarのAndroidドキュメントのいくつかを見る必要があります:

http://developer.android.com/reference/android/widget/ProgressBar.html

http://developer.android.com/reference/android/app/ProgressDialog.html

http://developer.android.com/guide/topics/ui/dialogs.html

于 2011-02-01T14:37:20.460 に答える