-2

Here is what I want to do: I click on a button which opens and activity that changes the background periodically.

My code looks like this:

 RelativeLayout relativeLayout;
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.picscreen);

Thread background = new Thread(){
    public void run(){
        try {
            sleep(2000);

            relativeLayout = new RelativeLayout(this);

            relativeLayout.setBackgroundResource(R.drawable.img10); 
            setContentView(relativeLayout);

        }catch (Exception e){

        }
    }
};
    background.start();
}protected void onDestroy(){
super.onDestroy();

}

The error says the relative Layout cannot ba applied to a thread. What do I do wrong?

4

2 回答 2

1

错误说相对布局不能应用于线程

因为run方法上下文用于创建RelativeLayout布局对象和调用setContentView

您应该使用YourActivityName.this而不是this调用setContentView方法和创建RelativeLayout布局对象。

建议:

当应用程序以当前代码运行时,应用程序将崩溃并显示以下消息:

Only the original thread that created a view hierarchy can touch its views.

所以使用runOnUiThread处理程序(而不是线程)在特定时间后执行某些任务

于 2015-02-09T06:04:03.210 回答
0

你可以使用

runOnUiThread(new Runnable(){
    //your code
});

在你的 run 方法中,在此之前你将不得不调用 looper.prepare() 我认为,但我不知道你为什么每次在 run 方法中都创建一个新的 RealtiveLayout,它很蹩脚。您可以每次都使用相同的 RelativeLayout,然后您就不必调用方法 setContentView()。我建议你好好看看 android 基础教程。

于 2015-02-09T06:17:32.853 回答