我的代码需要一些好的建议。 这就是我想做的事。
我的活动有一些可由用户选择的视图。假设用户选择了一个视图,我想在5秒之后自动取消选择此视图。 我是通过一个帖子来做的。
当用户选择视图时,我呼叫...
Deselector deselect = new Deselector(mp.getDuration(), clickedview);
deselect.start();
...在活动中。
取消选择器类:
class Deselector extends Thread
{
int millis=0;
View view = null;
Deselector(int millis, View view)
{
this.millis = millis;
this.view = view ;
}
@Override
public void run() {
// TODO Auto-generated method stub
try {
this.sleep(millis);
view.setSelected(false);
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
我的程序崩溃,logkitty说
12-11 14:29:37.457:ERROR / AndroidRuntime(3263):android.view.ViewRoot $ CalledFromWrongThreadException:只有创建视图层次结构的原始线程才能触及其视图。
怎么做对了?
提前致谢
M.D。
答案 0 :(得分:3)
在小部件或postDelayed()
上使用Handler
,而不是后台线程,在建议的延迟后继续工作。
答案 1 :(得分:1)
我通过以下方式开始工作
clickedview.postDelayed(new Deselector(clickedview), mp.getDuration());
我的deselctor现在可以运行得更短:
class Deselector implements Runnable
{
View view = null;
Deselector(View view)
{
this.view = view ;
}
@Override
public void run() {
// TODO Auto-generated method stub
try {
view.setSelected(false);
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}