2010-04-15 84 views

回答

2

你可以试试...

runOnUiThread(new Runnable(){ 

    public void run() { 
    setContentView(R.layout.main_layout); 

    }}); 

..但要小心,因为该公约是做setContentView(..);onCreate()上的默认线程那里。

+0

谢谢,它的工作原理。但我的目标是通过使用线程显示对话框并在后台加载布局。我也提出了一个新的问题 – Maneesh 2010-04-15 12:46:09

3

这是因为setContentView无法从非UI线程调用。

0

应该在屏幕上显示的内容只能在UI线程中调用。其他线程无法访问UI元素。如果你想一旦你的后台线程完成在屏幕上显示的东西,或从后台通知的东西线程可以使用处理器:

new Thread(new Runnable(){ 
public void run(){ 
//to do task in thread 
Message msg=new Message(); 
msg.what=10;//specify some message content to check from which thread u r receiving the //message 
handler.sendMessage(msg); 
} 
}).start(); 

,并在处理程序:

Handler handler=new Handler(){ 
void handleMessage(Message msg){ 
if(msg.what==10){ 
//carry out any UI associaed task that you want 
} 
} 
}; 

这种方法将确保在任何应该在后台运行的线程不会干扰UI线程,UI不会变慢,并且可以通过此方法更新UI /显示对话框。

runInUIThread()方法会将线程置于UI中,并且如果您的线程正在下载网络数据或从磁盘写入/读取数据,UI可能会变慢。

希望这会有所帮助。