[英]Android app not reacting to UI change from UI thread
我在Android用户界面中遇到了一个奇怪的问题。 当我想检查蓝牙连接功能时,我有一个简单的测试应用程序。 我实现了一种乒乓服务,我想在屏幕上说明乒乓活动。 为此,我将EditText字段放置在此处,使其不可编辑,并在交换乒乓消息后,在此处继续在X和+ char之间进行切换。 那就是我故事的背景。
我不得不在屏幕上说明活动(我真的很想知道该怎么做)。
这是执行切换的代码:
public void switchConnectionIndicator(){
if(SteeringScreen.lastConnectionPing > SteeringScreen.lastScreenUpdate) {
SteeringScreen.lastScreenUpdate = System.currentTimeMillis();
EditText connection = (EditText) findViewById(R.id.connectionInd);
System.out.println("Switch to "+(connection.getText().toString().equals("X") ? "+" : "X"));
connection.setText(connection.getText().toString().equals("X") ? "+" : "X");
}
}
方法位于与主UI屏幕相同的类中,并且由传感器事件触发以提供连续的屏幕刷新(我知道,它很脏,但是我只是想使其正常工作)。 乒乓活动有效,因为我在控制台中得到以下输出:
12-31 00:49:47.738 I/System.out: Switch to X
12-31 00:49:48.245 I/System.out: Switch to +
12-31 00:49:48.745 I/System.out: Switch to X
12-31 00:49:49.245 I/System.out: Switch to +
12-31 00:49:49.769 I/System.out: Switch to X
12-31 00:49:50.277 I/System.out: Switch to +
12-31 00:49:50.777 I/System.out: Switch to X
12-31 00:49:51.285 I/System.out: Switch to +
12-31 00:49:51.808 I/System.out: Switch to X
我和调试器一起检查了EditText组件中切换的确切时间,而这个混蛋在每个事件中都获得了正确的价值。 唯一缺少的是在屏幕上查看结果,该结果保持不变。 有人知道我在这里缺少什么吗?
首先,我不确定从何处调用您的方法,因此请确保setText在UI线程上发生(如果不是,则不一定会发生崩溃),您可以在方法内部使用以下代码来强制执行此操作
context.runOnUiThread(new Runnable() {
@Override
public void run() {
connection.setText(...);
}
};
您还提到“传感器事件以提供连续的屏幕刷新”。 我不确定您要执行的操作是什么意思,但请确保您没有在膨胀任何东西(从而使对连接视图的引用过时)
我设法以一种可行的方式修改了我的代码。 我在这里唯一缺少的是它为什么起作用:D当我更改静态变量时:
对于本地的私人公司,它开始起作用。 我不知道Java的某些秘密功能吗? 有人可以向我解释吗?
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.