1

今では、Android での私の最初のステップです。「ダウンロード」ボタンを使用して進行状況バーを実装しようとしています。ダウンロードボタンを押すと進行状況バーは進行し続けますが、進行状況全体が終わったときに進行状況バーを非表示にすることはできません。これが私のコードです。私を助けてください。

public class ProgressBarDemo extends Activity
{

    ProgressBar pb;
    Button bt;

    @Override
    protected void onCreate(Bundle savedInstanceState)
    {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.progressbar);

        pb = (ProgressBar) findViewById(R.id.progressBar1);
        bt = (Button) findViewById(R.id.button1);

        pb.setVisibility(View.VISIBLE);

        bt.setOnClickListener(new OnClickListener() 
        {

            public void onClick(View v)
            {
                Thread timer = new Thread()
                {
                    public void run()
                    {
                        try
                        {
                            for(int i=0; i<=50; i ++)
                            {   
                                pb.incrementProgressBy(i);
                                sleep(1000);
                            }

                                pb.setVisibility(View.INVISIBLE);
                                Toast.makeText(ProgressBarDemo.this, "Thank you for downloading", Toast.LENGTH_SHORT).show();

                        }catch(Exception e){}

                    }
                };
                timer.start();
            }

        });

    }

}
4

3 に答える 3

1

mainThread (UI スレッド) の ui 要素のみを変更する必要があります。

pb.post(new Runnable() {

        @Override
        public void run() {
            pb.setVisibility(View.INVISIBLE);
        }
    })

代わりは。

プログレスバーをインクリメントするために同じことを使用する必要があるかもしれません。別の方法として、AsyncTask http://developer.android.com/reference/android/os/AsyncTask.htmlクラスを使用できます。onProgressUpdate と onPostExecute は、UIThread で自動的に呼び出されます。

于 2012-08-22T09:52:55.013 に答える
0

別のスレッドから UI タスクを実行しないでください。これを使用してください...

public class ProgressBarDemo extends Activity
    {

        ProgressBar pb;
        Button bt;
   @Override
        protected void onCreate(Bundle savedInstanceState)
{
    super.onCreate(savedInstanceState);
    setContentView(R.layout.main);

    pb = (ProgressBar) findViewById(R.id.progressBar1);
    bt = (Button) findViewById(R.id.button1);

    pb.setVisibility(View.VISIBLE);

    bt.setOnClickListener(new OnClickListener() 
    {

        public void onClick(View v)
        {
            Thread timer = new Thread()
            {
                public void run()
                {
                    try
                    {
                        for(int i=1; i<=100; i ++)
                        {   
                            pb.setProgress(i);
                            sleep(100);
                        }


                                }catch(Exception e){}
                    finally{
                        runOnUiThread( new Runnable() {
                            public void run() {
                                 pb.setVisibility(View.INVISIBLE);
                            Toast.makeText(ProgressBarDemo .this, "Thank you for downloading", Toast.LENGTH_SHORT).show();
                            }
                        });
                    }

                }
            };
            timer.start();
        }

    });

}


    }
于 2012-08-22T09:59:44.760 に答える
0

より良い解決策である AsynTask を使用することもできます...

public class ProgressBarDemo extends Activity
{

    ProgressBar pb;
    Button bt;
@Override
    protected void onCreate(Bundle savedInstanceState)
{
super.onCreate(savedInstanceState);
setContentView(R.layout.main);

pb = (ProgressBar) findViewById(R.id.progressBar1);
bt = (Button) findViewById(R.id.button1);

pb.setVisibility(View.VISIBLE);

bt.setOnClickListener(new OnClickListener() 
{

    public void onClick(View v)
    {
        new AsynTasks().execute();
    }
});

}

class AsynTasks extends AsyncTask<Void, Integer, Void>
{

    @Override
    protected Void doInBackground(Void... params) {
        for(int i=1;i<=100;i++)
        {
            SystemClock.sleep(1000);
             publishProgress(i);
        }
        return null;
    }
    @Override
    protected void onPostExecute(Void result) {
        super.onPostExecute(result);
          pb.setVisibility(View.INVISIBLE);
          Toast.makeText(ProgressBarDemo .this, "Thank you for downloading", Toast.LENGTH_SHORT).show();
    }
    @Override
    protected void onProgressUpdate(Integer... values) {
        super.onProgressUpdate(values);
          pb.setProgress(values[0]);
    }
}
}
于 2012-08-22T11:12:44.763 に答える