更改活动中的视图

时间:2011-11-26 00:50:25

标签: java android android-layout

我有一个活动设置自定义创建的视图“onCreated”并启动一个Thread,这个线程每隔23ms循环一次并“使这个视图无效”,因此几乎总是调用onDraw。

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

我已将runOnUiThread设置为悬空,并且srceen将完全变为黑色。

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

1 个答案:

答案 0 :(得分:1)

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

另一个选择是发布您想要通过视图本身运行的代码,如下所示:

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

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

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