2011-11-26 83 views
0

我有一个活动,设置自定义创建的视图“onCreated”和一个线程启动,此线程周期每23ms和“无效”此视图,因此它的onDraw几乎总是被调用。更改活动视图

该视图在屏幕上继续显示,直到用户点击它(onTouchEvent)并且视图执行一些操作并准备好启用公共标志时,活动“知道”何时视图被激活并使其处理,在此活动应该将其视图更改为另一个自定义创建的视图,问题是因为标志检查是在线程的运行方法中完成的,活动发送“CallFromWrongThreadException”,这是因为据我了解“正在更改”在另一个线程(而不是UI)中。

我已经设置了runOnUiThread来绕过这个,并且srceen完全变黑。

此外,我试图将活动设置为framelayout,其中我在乞讨中添加了两个视图,并且线程更改了视图的可见性,但没有成功。

回答

1

所有的视图操作必须发生在UI线程上。有几种方法可以做到这一点。一种方法是使用AsyncTask来执行后台工作,因为它具有在后台工作完成后在UI线程上运行代码的方法。

另一种选择是后你想通过视图本身运行的代码,如:

mMyView.post(new Runnable() { 
    public void run() { 
     mMyView.doSomething(); 
    } 
}); 

此方法将用于切换现有视图的可见性工作。

这是这些方法中的一个很好的概述:http://android-developers.blogspot.com/2009/05/painless-threading.html

+0

莫非mMyView.doSomething();是mMyView.setVisibility(View.INVISIBLE)?这可能非常有用:D –

+0

是的。这应该很好。 – goto10