1

ボタンの背景を赤に変更してから、1秒待ってから別のアクティビティを呼び出します。

これは私のコードです:

btn1.setBackgroundColor(Color.RED);
SystemClock.sleep(1000);
startActivity(intent);

問題は、アプリケーションが1秒間スリープしてアクティビティを開始するが、ボタンの色が変わらないことです。どうすればこれを修正できますか?

4

3 に答える 3

2

SystemClock.sleep(1000); を使用する場合

ルーパーを処理するメイン スレッドがスリープ状態になります。

そして、それが戻ってきたら、最初に色を変更してからアクティビティを開始します。これらは遅滞なく次々と行われるため、変更された色を見ることはできません。

Handler postDelayed を使用します。これは、必要な遅延の後にアクティビティを実行するのに役立ち、スリープによってメイン ルーパー スレッドをブロックすることもありません。

于 2012-02-06T13:44:51.043 に答える
0

いいえ、色を設定していますが、それを見ることができません。なぜ見えないのか説明します。

1秒後に色が設定されます。ただし、1秒後に新しいアクティビティを開始しているため、色の変化を確認できません。実際、スリープは一定時間スレッドを一時停止しました。

この効果に気付くには、以下のコードを試してください。

       btn1.setOnClickListener(new View.OnClickListener() {             
            public void onClick(View v) {
                v.setBackgroundColor(Color.RED); 
                SystemClock.sleep(5000); // color will set after 5 seconds
            }
       });

この問題を克服する方法がわかりません。私はこれを知らせるためだけに答えました。

于 2012-02-06T12:02:28.897 に答える
0

スリープ中の同じスレッドで色を設定しているため、sleep コマンドによって UI がフリーズするため、変更が表示されません。

色を設定してから、他のアクティビティを起動する前に 5 秒間待機する新しいスレッドを生成する必要があります。

于 2012-02-06T12:32:07.177 に答える