我正在开发一个自定义ListView,它使用自定义ArrayAdapter和自定义元素。
其实我正在显示一条推文列表。
我希望为每条推文显示创建时间,就像推特一样。
我写了一个定时器,调用每个列表元素上的方法。此方法计算经过的时间,并使用setText()在元素上的TextView上设置它。
问题是我无法获得列表更新。仅当我添加新元素或手动滚动列表时,值才会更改。
如果您需要代码,请自由询问。
修改
Nick Caballero的答案是正确的,但它没有用。
我已经尝试过该代码了。问题出现在计时器和 try catch 中,并带有一般异常。
计时器正在碾压 CalledFromWrongThreadException 。解决方案是使用 runOnUiThread 进行操作。
答案 0 :(得分:0)
您可能希望在控件更新后尝试在控件上调用invalidate()
。代码会有所帮助。
答案 1 :(得分:0)
调用notifyDataSetChanged
执行此处不需要的其他操作。使用相对于数据时间戳的经过时间更新视图并不意味着数据发生了变化。
有关如何遍历列表中的可见视图,请参阅https://stackoverflow.com/a/2679284/724068。然后,您可以提取包含已过去时间的视图并相应地进行更新。由于您必须经常运行以使UI保持最新,因此您必须使用Runnable,每秒都发布到主Looper。