每隔多久可以更新TextView而不会出错?

9
假设有一个TextView。
TextView tvSum = findViewById(R.id.sumTexviewId);

如果我想改变显示的文本,我会这样做:
tvSum.setText("£0.00");

假设我经常这样做,每次按下按钮时都会这样做,可能显示在收银机上输入的总和。在这个例子中,你按下1,它说“1p”,然后你按下2,它就会说“12p”,以此类推。
我发现如果我这样做,文本会在一段时间后变形。对于序列12345,首先一切都很好:
- (尚未按下任何按钮) - ("1"被按下) - (然后按“2”) - (然后按“3”)
然而,在此之后的事情变得混乱:
- (然后按“4”) - (然后按“5”)
此后再也没有变得更好。我没有发布代码,因为代码真的非常简单:一堆按钮,只向一个textview写入一个短字符串——代码中没有任何东西会导致这种情况,老实说。(是的,我通过将其放在Toast上验证了正在编写的字符串是否正确)。有人遇到过这种情况吗?如果有,怎么解决?

我建议移除绘制缓存(setDrawingCacheEnabled(false))。 - Mr.Me
这很令人困惑。你确定你没有对它进行任何花哨的操作吗? - Ahmad
是的,此时此刻,我认为如果您能发布一个演示问题的最小完整程序,将会有所帮助。 - Edward Falk
@Mr.Me 好的建议,恐怕那并没有起作用! - Neil Townsend
你可以发布你的代码吗?顺便问一下,你有在不同设备上测试过吗? - Mr.Me
显示剩余2条评论
1个回答

5
原来Mr.Me的想法是正确的,这与改变文本时背景渲染的方式有关。我故意将按钮设置为在黄色轮廓内具有透明背景(而不是未指定),使用颜色0x00000000。
由于应用非完全不透明的填充时,新的背景会覆盖之前的内容(我认为是大约3个位图的循环),而不是定义内容。我猜这可能是Canvas使用的默认PorterDuff传输模式所致。
解决方案:
1. 将背景未指定。这也是透明的,但由于某种原因是主动的。 2. 有任何完全的Alpha背景。(缺点:如果您想要一些透明度,则无效) 3. 编写自定义视图,重写onDraw以在调用super.onDraw()之前使用0x00主动填充画布。(缺点:这会摆脱此视图中的任何背景,但保留了该视图后面的视图)。
对于“不做任何花哨的事情”的声明,我表示歉意,我没有意识到主动将背景设置为透明算是“花哨”!

嗨@Neil,我遇到了相同的问题。还有其他的解决方法吗? - bman

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接