【问题标题】:ListView doesn't refresh when last item is deleted删除最后一项时 ListView 不刷新
【发布时间】:2012-10-18 19:14:09
【问题描述】:

我的应用有问题。我将 CursorLoader 与 CursorAdapter 结合使用。一切都按预期工作,除了一个条件:当我在 ListView 上有一些项目并且我将适配器中的光标交换为空的光标时,不会删除可见项目(只有行之间的分隔符消失)。当我触摸 ListView 时,它会立即消失。

情况是这样的。我有一些非空光标:

然后我换成没有结果的游标:

如您所见,只有分隔线消失了。触摸屏幕后,两个项目都消失了。

这是我交换光标的函数:

public void onLoadFinished(Loader<Cursor> loader, Cursor cursor)
{
    ratesAdapter.swapCursor(cursor);
}

片段来源:http://pastebin.com/N2YGzgRj

请帮我解决这个问题。

【问题讨论】:

  • 您在delete() 之后尝试过adapter.notifyDataSetChanged(); 吗?
  • 我们能看到更多代码吗?是否通过 notifyDataSetChanged() 通知适配器上的数据集?
  • 这是我对这个片段的全部来源:pastebin.com/N2YGzgRj

标签: android android-listview android-cursoradapter android-listfragment


【解决方案1】:

好的,所以在进一步调查问题后,我发现这个问题只适用于Android 4.0.x。在 2.2、2.3 或 4.1 中不存在此错误,仅在 4.0 中存在。我解决此错误的唯一方法是添加到 onLoadFinished()

getListView().setVisibility(View.GONE);
getListView().setVisibility(View.VISIBLE);

我不觉得它优雅,但也许你会有一些想法。

【讨论】:

  • 废话,不小心被否决了,无法更改。 sigh 抱歉:/
  • 这仍然是 5.0 中的一个错误,我尝试了所有可用的方法来让 ListView 在删除所有项目后刷新。这是唯一有效的。
【解决方案2】:

不包括 notifyDataSetChanged(); 通常是导致这些 listView 不刷新问题的原因。在加载代码之后尝试包含它是我唯一可以推荐的,直到我获得更多信息。

【讨论】:

  • 在 onLoadFinished() 中添加 notifyDataSetChanged() 没有帮助。情况是一样的。
  • 你确定 onLoadFinished 被调用了吗?尝试在方法内部设置一个 Log.d。
  • 我在 onLoadFinised() 中设置了 Log.d。函数被正确调用。
猜你喜欢
  • 1970-01-01
  • 2015-10-18
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多