0

我正在开发一个自定义 ListView,它使用自定义 ArrayAdapter 和自定义元素。

实际上,我正在显示推文列表。

我想为每条推文显示创建后经过的时间,就像推特一样。

我写了一个计时器,它在每个列表元素上调用一个方法。此方法计算经过的时间,并使用 setText() 将其设置在元素上的 TextView 上。

问题是我无法获取列表更新。仅当我添加新元素或手动滚动列表时,值才会更改。

如果您需要代码,请自由询问。

编辑:

Nick Caballero 的答案是正确的,但它不起作用。

我已经尝试过该代码。问题出在计时器和带有通用异常的try catch中。

计时器抛出了CalledFromWrongThreadException。解决方案是使用runOnUiThread进行操作。

4

2 回答 2

0

您可能想invalidate()在控件更新后尝试调用它。不过,代码会有所帮助。

于 2013-08-14T16:24:47.733 回答
0

调用notifyDataSetChanged会执行此处不需要的其他操作。使用相对于数据时间戳的经过时间更新视图并不意味着数据发生变化。

有关如何遍历列表中的可见视图,请参阅https://stackoverflow.com/a/2679284/724068 。然后,您可以提取包含已用时间的视图并进行相应更新。由于您必须经常运行它以使 UI 保持最新,因此您必须使用 Runnable,每秒发布到主 Looper。

另请参阅https://stackoverflow.com/a/9987616/724068

于 2013-08-14T16:29:47.197 回答