当前位置: 首页 > 知识库问答 >
问题:

java - android 更新了TextView 的值ui没更新是为什么?

华章横
2024-05-06

问题是: 主线程中通过 setText 更新了 TextView,但是视图没有更新这是为什么?而且仅在app运行一段时间后开始不更新,一开始运行的时候都能正常更新。

详情如下:

1FJ2RN_ZPXSGC9%~2%}14FT.png
image.png
用的 BottomNavigationView 包做的地步导航菜单
R3W7Y[Y9YB6CRC7`_%UQ3UK.png
当 ws 接收到刷新未读消息数量的时候会用 EventBus 推送一条更新数量的消息
image.png
在具体的页面中做了 eventbus 的监听,也能正常收到 eventbus 的消息
C1IO5S$K0)@YCL_X5M~LTR7.png
接收到消息,重新掉接口获取未读消息数量,并更新导航菜单的未读数量
IY0Z2ZZYBVP~9V_)(GG%9[S.png
上述是具体的更新代码,都有成功执行。但是页面就是死活没变化,我也有看线程,上述更新代码都是在主线程中执行的,就是不更新,而且很奇怪,一开始运行app的时候能正常更新数量,后面ws、eventbus 都正常的情况下,一段时间后,改了未读消息数量,改成功了,页面不更新。该如何解决?

共有2个答案

廖弘伟
2024-05-06

主线程中可以正常更新 ui;是更新的视图错误导致。

姚俊材
2024-05-06

Android 中,TextView 的值没有更新,即使你在主线程中调用了 setText 方法,可能有几个原因:

  1. UI刷新问题:Android 的 UI 更新不是实时的,它依赖于一个消息队列。如果你的代码执行得太快,或者在某些情况下,Android 系统可能不会立即处理 UI 刷新。尝试在 setText 之后使用 invalidate()requestLayout() 方法强制 UI 刷新。
  2. 视图重用问题:如果你在使用 ViewPagerRecyclerView 或其他可以重用视图的组件,并且视图被缓存和重用,那么你可能需要确保在每次视图被重新使用时都更新其数据。
  3. 线程问题:虽然你提到更新是在主线程上进行的,但还是要确保没有其他代码在后台线程中修改了 UI。Android 不允许在后台线程中直接修改 UI。
  4. 缓存问题:有时,视图或布局可能会被缓存,导致更新不会立即显示。尝试调用 findViewById 方法重新获取 TextView 的引用,并再次设置文本。
  5. 事件总线问题:EventBus 的事件处理可能存在问题。确保事件被正确发布和接收,并且接收事件的代码逻辑是正确的。
  6. 布局问题:检查你的布局文件,确保 TextView 的可见性和其他属性设置正确。
  7. 数据更新问题:确保你真正更新了用于显示的数据。有时,开发者可能错误地认为数据已经更新,但实际上并没有。

为了更准确地诊断问题,你可能需要提供更多的代码和上下文信息。不过,基于你提供的信息,你可以尝试上述建议,看看是否能解决你的问题。

 类似资料:
  • 问题内容: 我正在使用计时器来创建秒表。计时器通过增加整数值来工作。然后,我想通过不断更新textview在活动中显示此值。 这是我在服务中尝试更新活动的textview的代码: 我在错误的线程中更新UI时遇到某种错误。 如何调整我的代码以完成不断更新textview的任务? 问题答案: 上面的代码可以工作… 注意:必须在您的主线程中创建处理程序,以便您可以修改UI内容。

  • 问题内容: 我有主要的仓库管理人员,他在其中将整数值设置为textview,现在我希望在调用onResume()时更新此值…但是当我添加我的一点onResume()代码时 到该应用程序,我什至无法启动它,LogCat变得非常疯狂,并且没有记录任何活动超过半秒钟。有什么办法吗?提前致谢 问题答案: 我将从添加: 我还将删除该内容: from ,因为每次都被调用,所以也被调用。

  • 我是java新手,所以请不要后悔java中的对象和东西正在传递引用的值,但下面是我试图传递对象的代码。当我通过传递到函数中更新值时,a的值没有改变。发生了什么请帮助我。。。

  • 我想安装Primeng7.0.0到我的Angular项目,但首先我需要更新我的JHipster到最后一个版本。 当我将此命令写入terminal时,我得到以下错误

  • 我对android很陌生,刚开始学。我已经安装了android Studio。当我启动它的时候,它试图更新组件,但是没有更新任何东西。确实出现了一条消息,说没有要更新的内容,当我单击“完成”时,没有任何反应。 我附上了错误的截图。请告诉我如何解决这个问题。提前感谢。

  • layout-widget.xml: background.xml: 来自DbAdapter.java的getTextViewData(): 有人知道我的代码中缺少了什么吗?