1

アクティビティのレイアウトを変更するスレッドを作成したい...ウェルカムページとアクティビティメインの2つのレイアウトがあります...スレッドの目標:アプリケーションを起動すると、ウェルカムページのレイアウトがわずか5秒で表示され、その後、レイアウトは再び activity_main になります ...

以下のようにコードを書きました。

package com.example.tripolimazad;

import android.os.Bundle;  
import android.app.Activity; 
import android.view.Menu; 
import android.widget.TextView;

public class MainActivity extends Activity {

    public TextView counter = null;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.welcomepage);
        counter = (TextView) findViewById(R.id.Counter);

        Thread th=new Thread(){ 
            @Override
            public void run(){
                try
                {  
                            Thread.sleep(10000);  
                            setContentView(R.layout.activity_main);   
                }catch (InterruptedException e) {
                } 
            }

        };
        th.start();

    }

    @Override
    public boolean onCreateOptionsMenu(Menu menu) {
        // Inflate the menu; this adds items to the action bar if it is present.
        getMenuInflater().inflate(R.menu.main, menu);
        return true;
    }

}

しかし、うまくいきません!!! 誰でも解決策を教えてください!

4

4 に答える 4

2

非 UI スレッドでは UI を変更できませんが、では次のメソッドActivityを使用できます。runOnUiThread

runOnUiThread(new Runnable() {
    @Override
    public void run() {
        setContentView(R.layout.activity_main);
    }
});

これは非常に奇妙に思えますが、これをonCreate.

于 2013-08-22T20:15:57.363 に答える
1

次のようなCountDownTimerを使用することもできます。

protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);    
    setContentView(R.layout.welcomepage);
    //display the logo during 5 secondes,
    new CountDownTimer(5000,1000){
        @Override
        public void onTick(long millisUntilFinished){} 

        @Override
        public void onFinish(){
               //set the new Content of your activity
               MainActivity.this.setContentView(R.layout.main);
        }
   }.start();
   //...
}

詳細については、アプリケーションの起動時にロゴを数秒間表示するを参照してください。

于 2013-08-22T20:22:11.987 に答える