我有一个按钮,我不想在可以运行一定时间之前点击(比如5秒?)我尝试创建这样的线程
continueButtonThread = new Thread()
{
@Override
public void run()
{
try {
synchronized(this){
wait(5000);
}
}
catch(InterruptedException ex){
}
continueButton.setVisibility(0);
}
};
continueButtonThread.start();
但是我不能在不同的线程中修改按钮的setVisibility属性。这是LogCat的错误:
10-02 14:35:05.908:ERROR / AndroidRuntime(14400):android.view.ViewRoot $ CalledFromWrongThreadException:只有创建视图层次结构的原始线程才能触及其视图。
还有其他方法来解决这个问题吗?
答案 0 :(得分:6)
问题是您只能在UI线程中触摸活动视图。你可以使用runOnUiThread
函数来完成它。我建议你使用
handler.postDelayed(runnable, 5000)`
答案 1 :(得分:3)
您必须从UI线程更新您的视图。你正在做的是你从非ui线程更新。
使用
contextrunOnUiThread(new Runnable(){
@Override
public void run() {
// TODO Auto-generated method stub
}});
或在您认为正确的时间更新视图可见性时使用处理程序并发信号hand.sendMessage(msg)
Handler hand = new Handler()
{
@Override
public void handleMessage(Message msg) {
/// here change the visibility
super.handleMessage(msg);
}
};
答案 2 :(得分:1)
您可以使用View
课程中的postDelayed方法(A Button
是View
的孩子)
答案 3 :(得分:0)
这里是我找到的简单答案
Button button = (Button)findViewBYId(R.id.button);
button .setVisibility(View.INVISIBLE);
button .postDelayed(new Runnable() {
public void run() {
button .setVisibility(View.VISIBLE);
}
}, 7000);