java - 更改 Activity 中的 View

标签 java android android-layout

我有一个 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/

相关文章:

android - 如何将 2 个子部件中的一个子部件居中

android - 没有网络连接时如何调用新布局?

android - 如何在 zoom android 中应用长按和捏合?

java - 我在使用 selenium Jar 文件 : 时在 eclipse 中收到此错误

Java - 从 ArrayList 中删除最后一个已知项目

android - 我应该在销毁 Activity 时手动关闭应用程序创建的 HandlerThreads 吗?

android - QuickBlox Android SDK OwnSurfaceView 问题

java - 在 java arraylist 中搜索正则表达式

java - 在 java swing 中自定义默认的 html 链接颜色

java - Retrofit - JSON 数组解析