gpt4 book ai didi

android - 屏幕旋转导致 TextViews 停止更新

转载 作者:行者123 更新时间:2023-11-29 18:14:49 25 4
gpt4 key购买 nike

我的应用每秒从蓝牙设备接收数据 4 次,对其进行解析,然后将其显示到屏幕上。一切正常,直到屏幕方向改变,然后 textViews 恢复到它们在我的 onCreate 中设置的默认值,并且不会从那里改变。

我仍然从蓝牙线程接收来 self 的消息处理程序的数据,解析工作正常,但我的 updateUI() 方法什么都不做。 updateUI() 中的所有内容都是将 TextView 的文本设置为值,如 tv_text.setText(doubleValue);。同样,这在屏幕旋转或休眠之前工作正常。

当屏幕旋转时,View ID 是否会改变,所以我的 TextView 是错误的?我该如何解决这个问题?我看到其他人遇到 TextView 丢失数据的问题,但我不确定这是否是同一个问题,因为我无法在旋转后再次设置文本。

谢谢。

编辑:我发现了一些奇怪的行为。

  1. 如果我在连接到 BT 设备之前旋转屏幕,它会在我连接时工作。但是当我再次旋转时它会停止。

  2. 当我旋转时, TextView 显示连接之前最后分配给它的值。例如,如果执行 tv.setText("10"),它将显示 10。然后我连接,它更新为正确的值。然后我旋转,它确实返回显示 10...

  3. 我唯一一次在我的 updateUI() 代码中设置文本值,并且在收到和解析消息后调用。

现在我真的很困惑......

编辑 2

好的,我做了一些更多的测试,我想我可能已经找到了原因。当我尝试断开蓝牙连接时,我发现它并没有断开。所以我尝试在旋转之前断开连接,然后再次连接并且成功了。

所以我相信当 onCreate 再次运行时,它会复制我的蓝牙通信线程并忽略旧的。问题是我不知道如何初始化 BTComm 对象,使其在 Activity 被销毁并重新创建时仍然可以工作,它仍然可以工作并且可以与 UI 通信。这是一些代码:

@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);

if (btc == null){
btc = new BTComm(this, messageHandler);
}

tv_temp1 = (TextView) findViewById(R.id.tv_temp1);
tv_temp2 = (TextView) findViewById(R.id.tv_temp2);
tv_temp1Label = (TextView) findViewById(R.id.tv_temp1Label);
tv_temp2Label = (TextView) findViewById(R.id.tv_temp2Label);
tv_status = (TextView) findViewById(R.id.tv_status);
}

以及处理从 BT 通信类 (btc) 接收到的消息的处理程序

Handler messageHandler = new Handler() {
public void handleMessage(Message msg) {
switch(msg.what){
case BTComm.MESSAGE_CONNECTED:
Toast.makeText(LambdaActivity.this, "Connected!", Toast.LENGTH_SHORT).show();
tv_status.setText("Connected.");
mode = MODE_CONNECTED;
break;
case BTComm.MESSAGE_READ:
parse(msg.getData().getString("results"), msg.getData().getLong("time"));
break;
case BTComm.MESSAGE_DISCONNECTED:
Toast.makeText(LambdaActivity.this, "Disconnected!", Toast.LENGTH_SHORT).show();
tv_status.setText("Not connected...");
mode = MODE_NOT_CONNECTED;
break;
}
}

};

如果我每次旋转屏幕时断开连接并重新连接,它会起作用,但这会中断应用程序的数据记录功能,所以我不想这样做......如果我将方向锁定为横向,屏幕显然不会旋转并导致此问题,但是如果手机休眠,当它以纵向唤醒更多时,它会旋转到横向模式并出现问题。

最佳答案

为了防止其他人遇到这个问题,我已经找到了解决方法。

我最终将我的蓝牙监听器移动到一个服务,当它从 BT 设备接收到数据时,它会广播它并由我的 UI Activity 接收。

可以在我的其他问题中找到更多信息,此处:Android background task and lifecycle

关于android - 屏幕旋转导致 TextViews 停止更新,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8797628/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com