0

我有一个ListActivity从数据库查询中获取数据的。我还有一个自定义适配器,它扩展了简单的光标适配器。

为了显示自定义内容,我重写了newView和 bindView 方法。

视图的每个元素都有:

  1. TextView包含标题
  2. ImageView包含星数 - 显示的图像根据从数据库中获得的值进行更改
  3. 按钮 - 单击时按钮文本会发生变化(收藏夹/收藏夹),并触发数据库更新事件。

我的问题是这个 - 当我滚动时ListView,我所做的更改似乎消失了..例如,第一个项目被标记为收藏,列表被滚动......当我回到第一个项目时,文本恢复恢复到以前的值,尽管内部数据库已更新。

我读到这notifyDatasetChanged()不适合这种情况,因为应该通知适配器数据库更改。我正在尝试使用该reQuery()方法,但不知道将其放置在哪里。

我应该把它放在按钮reQuery()的方法中吗?onClick如果不是,应该放在哪里?

4

3 回答 3

1

您使用的任何适配器都必须具有 getView 方法。每当滚动列表时,都会为视图中的所有 listItem 调用此 getView 方法。确保在 getView 方法中。视图是动态生成的。


它应该检查单击或更改的值。


要在不滚动的情况下更新列表,您必须调用 listView.getAdapter().notifyDataSetChanged()

检查以下链接。在这里,我提到了正确使用 listview 的完整代码。使用它我们可以实现任何列表视图行为。我们也可以嵌入动画。

更改 ListView 背景 - 奇怪的行为

希望这有帮助:)

于 2011-02-04T12:10:54.857 回答
0

如果您扩展了 BaseAdapter ,则在更改数据后调用 listView.setAdapter() 和 getView() ,也更新视图的数据。

于 2011-02-04T12:00:06.217 回答
0

使用SetListAdapterwithArrayAdapter显示列表。使用ConvertView以避免膨胀View

if (convertView==null)
{
     //inflate your list
}
于 2011-02-04T12:09:48.127 回答