通过 uri / 通过它包含的数据获取 ListView 项目位置

Get ListView item position by uri / by the data it contains

我有一个使用自定义 CursorAdapter 填充的 ListView。 现在我只想手动更新 ListView 中的一个特定项目。我有那个项目的内容 URI。是否可以仅使用此信息来获取项目在 listView 中的位置? 如果我有职位,我可以做

View v = mListView.getChildAt(itemPosition - mListView.getFirstVisiblePosition());

更新视图。但是我怎样才能得到 itemPosition?

我知道我在 onItemClickListener 中获得了位置,但我需要在未被点击的情况下更新视图。

大家有帮助吗?

ListView不支持更新单个仓位。

您必须使用新数据更新适配器(即使您更改单个位置)并调用 mAdapter.notifyDataSetChanged()

如果您通过 View 的位置(通过 listView.getChildAt())获得它,将会起作用。但是,如果您上下滚动列表,该视图将再次显示旧数据,因为适配器不知道更改(并且是适配器更新视图 contect 视图 getView())。

当您调用 notifyDataSetChanged() 时,您告诉适配器您的数据集有新信息并且 ListView/Adapter 将重新绘制可见项目(它不会重新绘制整个一次列出..只有可见的项目)。

以后可以考虑换成RecyclerViewRecyclerView 中使用的 BaseAdapter 支持 add/remove/update 单个位置等操作。