从 CountDownTimer 更新 TextView 的多个实例的文本

Posted

技术标签:

【中文标题】从 CountDownTimer 更新 TextView 的多个实例的文本【英文标题】:Updating text for multiple instances of a TextView from a CountDownTimer 【发布时间】:2012-10-22 23:56:57 【问题描述】:

我在尝试更新 TextView 的文本时遇到问题。

我有一个 MainActivity,我在其中创建了一个带有空 ListView 的布局。 为了用自定义 ListItems 填充这个 ListView,我创建了一个自定义 AsyncTaskLoader 来检索信息以填充到 ListItems 中,还创建了一个自定义 BaseAdapter 来填充加载到 ListItems 中的数据。

这部分没有错误,而且做得很完美。

但是,我在尝试从 ListView 中的 ListItem 更新 TextView 上的文本时遇到问题。 你看,我创建了一个自定义的 CountDownTimer,它采用一个名为 OnTickListener 的接口作为构造函数中的参数。 每次创建 ListItem 时我都有一个唯一的 ID,我使用它来将该 ListItem 的 TextView 存储在 HashMap 中,并将 CountDownTimer 存储在 HashMap 中。这些 HashMap 被创建并保存在自定义 BaseAdapter 中。

BaseAdapter 还实现了 OnTickListener。

每次 MyCountDownTimer 调用 OnTick 时,它都会调用构造函数中提供给它的 OnTickListener 并传递两个参数:int id 和 String text。

这将调用 OnTickListener 唯一方法的 BaseAdapters 实现:public void OnTick(int id, String text)。

在 onTick 方法中,我执行以下操作:

    在我前面提到的 HashMap 中找到 id 的 TextView。 更新 TextViews 文本。

现在这似乎以某种方式起作用。因为如果我上下滚动,我可以看到 TextViews 上的文本一旦再次显示在屏幕上就会更新。但如果 TextView 已经显示在屏幕上,它不会更新它。 我试图调用 TextView.invalidate() 和 TextView.postInvalidate()。在绝望中,我什至尝试创建一个 Handler 来发布一个 Runnable 来尝试更新 TextView。

但似乎没有任何效果。关于如何更新 TextView 有什么想法吗?

TL 博士: 我需要知道如何从 BaseAdapter 中创建的 CountDownTimer 更新 ListItem 内的 TextView - 它是 Activity 的一部分。

对不起文字墙^^"

【问题讨论】:

【参考方案1】:

您应该更新适配器的“数据”,该数据应包含将显示在每个文本视图上的每个项目的内容。

然后在适配器上调用 notifydatasetchanged()。

【讨论】:

非常感谢! :-) 这就像一个魅力。我不敢相信解决方案这么简单。 最简单的解决方案是最好的:)

以上是关于从 CountDownTimer 更新 TextView 的多个实例的文本的主要内容,如果未能解决你的问题,请参考以下文章

带 ProgressBar 的 CountDownTimer,重启应用时继续进度条

android倒计时功能的实现(CountDownTimer)

当活动不在前面时,在Android中暂停CountDownTimer

CountDownTimer.cancel() 在 Android 中不起作用

XX 格式的 CountDownTimer 秒数

如何向 CountDownTimer 添加闹钟?