0

私は3つのレイアウトを持っています:

Layout1
-->onClick()-->show
Layout2
-->wait three seconds-->show
Layout3

問題は、Layout2 が表示されないことです。使用するレイアウトを設定するには

setContentView(int);

関連するコードは次のとおりです。

public class TrainingActivity extends Activity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.layout1);
        final Button inputButton = (Button)findViewById(R.id.inputButton);
        inputButton.setOnClickListener(new OnClickListener() {
            @Override
            public void onClick(View v) {
                    changeLayouts();
            }
         });
    }
    public void changeLayouts() {
        setContentView(R.layout.layout2);
        try {
            TimeUnit.MILLISECONDS.sleep(3000);
        } catch (InterruptedException e) {
            e.printStackTrace();
        }
        setContentView(R.layout.layout3);
    }
}

私の考えは、Android が "Event-Loop" (Qt など) のようなものを使用し、私のメソッドがコントロールをブロックして、レイアウトを表示する "Event-Loop" に戻るというものでした。しかし、私は自分のエラーを見つけることができませんでした。

4

2 に答える 2

1

あなたlayout2が表示されない理由TimeUnit.MILLISECONDS.sleep(3000);は、UIスレッドをスリープ状態にしているため、UIスレッドがレイアウトを変更するリクエストを処理できないためです。そして、それが目覚めたとき - それはすぐに設定さlayout3れるlayout2ので、表示されません。

Handler.postDelayed(Runnable, long)実行を延期するために使用することを検討してください

したがって、これは期待どおりに機能するはずです。

public class TrainingActivity extends Activity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.layout1);
        final Button inputButton = (Button)findViewById(R.id.inputButton);
        inputButton.setOnClickListener(new OnClickListener() {
            @Override
            public void onClick(View v) {
                    changeLayouts();
            }
         });
    }
    public void changeLayouts() {
        setContentView(R.layout.layout2);
        Handler handler = new Handler();
        handler.postDelayed(new Runnable() {

            @Override
            public void run() {
                setContentView(R.layout.layout3);
            }
        }, 3000);

    }
}
于 2013-06-18T17:17:20.903 に答える
0

これを試してみてください、きっとうまくいきます

    public void changeLayouts() {
         setContentView(R.layout.layout2);

        Thread Timer = new Thread(){
       public void run(){
          try{
              sleep(3000);
          } catch(InterruptedException e){
              e.printStackTrace();
          } finally {
               setContentView(R.layout.layout3);                
          }
       }    
    }; Timer.start();
} 
于 2013-09-17T09:39:39.663 に答える