【发布时间】:2012-04-23 23:57:25
【问题描述】:
我有一个简单的 ListView,由我的 ArrayAdapter 支持,它每隔约 5 秒左右更新一次新数据。每隔 5 秒,我会在 ArrayAdapter 上调用 notifyDataSetChanged,这会导致 ListView 被新数据重绘。所有这一切都很好,我每 5 秒就会看到一次新数据。
但是,在我的 ArrayAdapter 的 getView 方法中,我正在膨胀一个包含 EditText 的 LinearLayout。这是我要解决的问题:
- 用户在某些输入的某一行和类型中选择了 EditText。
- 用户专注于 EditText 超过 5 秒。
- notifyDataSetChanged 在新数据到达我的数组适配器时被调用。
- 用户失去对 EditText 的关注,因为它已被重绘。 notifyDataSetChanged 似乎会导致所有 ListView 元素都被重绘。
让用户保持关注此 EditText 但确保数据始终是最新的最佳方式是什么?
谢谢,
肖恩
【问题讨论】:
-
编写自定义
BaseAdapter,提供实际(内存中可用,不为空)视图,选择一个(比如哪个用户选择并键入文本或暂时聚焦)。更新数据:在适配器中存储描述数据的对象列表,然后抛出列表,如果视图可用,手动更新它(如getView方法)与关联的(新)对象。有点模仿notifyDataSetChanged -
嗨弗拉基米尔 - 感谢您的回复。我应该在我原来的问题中真正概述这一点,但如果可能的话,我更愿意继续使用 notifyDataSetChanged。遍历 ListView 中的每一行并更新视图而不是依赖于调用 getView 不是我想立即走下去的路。由于我的数据集中的项目数量可能会发生变化,我不确定列表视图迭代解决方案对我来说是否可行。还是谢谢你。
标签: android listview android-edittext android-arrayadapter