我有一个 Activity 设置自定义创建的 View “onCreated”,并启动一个线程,该线程每 23 毫秒循环一次并“无效”该 View ,因此几乎总是调用 onDraw。
此 View 将在屏幕中继续显示,直到用户单击它(onTouchEvent)并且 View 执行一些处理,并且准备好后启用公共(public)标志,以便 Activity “知道” View 何时被激活并在此时进行处理该 Activity 应该将其 View 更改为另一个自定义创建的 View ,问题是因为标志检查是在线程的 run 方法中完成的,所以该 Activity 发送一个“CallFromWrongThreadException”,这是因为据我了解,“更改”是在另一个线程(不是 UI)中。
我已将 runOnUiThread 设置为忽略此设置,并且 srceen 完全变黑。
此外,我尝试将 Activity 设置为框架布局,其中我在请求时添加两个 View ,并且线程更改 View 的可见性,但完全没有成功。
最佳答案
所有 View 操作都必须发生在 UI 线程上。有几种方法可以做到这一点。一是使用AsyncTask执行后台工作,因为它可以在后台工作完成后在 UI 线程上运行代码。
另一种选择是发布您想要通过 View 本身运行的代码,如下所示:
mMyView.post(new Runnable() {
public void run() {
mMyView.doSomething();
}
});
此方法非常适合切换现有 View 的可见性。
这是对这些方法的很好的概述:http://android-developers.blogspot.com/2009/05/painless-threading.html
关于java - 更改 Activity 中的 View ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8275500/