0
beginButton.setOnClickListener(new Button.OnClickListener() {
    @Override
    public void onClick(View v) {
        PlayThread playThread = new PlayThread();
        Thread thread = new Thread(playThread);

        thread.start();
    }
});

public class PlayThread implements Runnable {
    @Override
    public void run() {
        beginButton.setClickable(false);
        pauseButton.setClickable(true);
        messageBool = true;
        int maxProgressBar = playProgressBar.getMax();
        int currentInt = playProgressBar.getProgress();

        for(; currentInt <= maxProgressBar; ++currentInt)
        {
            if(messageBool == false)
            {
                break;
            }
            playProgressBar.incrementProgressBy(1);
            try {
                Thread.sleep(400);
            } catch (InterruptedException e) {
                e.printStackTrace();
            }
        }

        if(currentInt > maxProgressBar)
        {
            playProgressBar.setProgress(0);
            beginButton.setClickable(true);
            pauseButton.setClickable(false);
        }
    }
};

皆さんこんにちは。このコードに問題はありますか? UIスレッド以外の他のスレッドでは UI のコントロールを操作できないことはわかっています。しかし、このコードは問題なく動作します。前もって感謝します!

4

1 に答える 1

1

View画面に再描画する必要があるような方法で を変更しなければ安全です。たとえば、テキストを設定したり、そのの をsetClickable変更したりした場合にのみ、そのプロパティの 1 つを変更します。アクションは を無効にします。恐ろしい例外Touched from the wrong thread... などが表示されます。LayoutParamsViewView

ProgressBarスレッドセーフで、どのスレッドからでも使用できます。

于 2012-07-26T04:57:15.580 に答える