【问题标题】:Android - updating the simpleCursorAdapterAndroid - 更新 simpleCursorAdapter
【发布时间】:2011-02-04 11:48:48
【问题描述】:

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

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

视图的每个元素都有:

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

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

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

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

【问题讨论】:

    标签: android android-listview android-adapter


    【解决方案1】:

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


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


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

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

    Change ListView background - strange behaviour

    希望有帮助:)

    【讨论】:

    • 谢谢,真的很有帮助,它帮助我解决了一些其他问题,但我仍然有同样的问题,即适配器不知道视图已经改变。这就是我的代码所做的,更改是数据库更改 - 即视图元素具有嵌入式按钮,并且按钮单击更改数据库中的值。关闭并重新打开活动显示数据库已正确更新,但不是实时更新。我的活动类扩展了 ListActivity
    • 我还实现了一个带有删除按钮的 listView,单击该按钮从数据库中删除行数据,然后 listview 得到更新。我从不使用任何扩展 ListActivity 的活动。相反,我总是在活动中嵌入列表视图。这是个人喜好,但有时它肯定会解决一些问题。
    【解决方案2】:

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

    【讨论】:

      【解决方案3】:

      使用SetListAdapterArrayAdapter 来显示列表。使用ConvertView 避免夸大View

      if (convertView==null)
      {
           //inflate your list
      }
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2010-12-31
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2011-07-04
        • 2011-12-14
        • 1970-01-01
        相关资源
        最近更新 更多