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

Posted

技术标签:

【中文标题】通过 uri / 通过它包含的数据获取 ListView 项目位置【英文标题】:Get ListView item position by uri / by the data it contains 【发布时间】:2020-03-05 04:13:05 【问题描述】:

我有一个使用自定义 CursorAdapter 填充的 ListView。 现在我想手动更新 ListView 中的一个特定项目。我有该项目的内容 URI。是否可以仅使用此信息来获取列表视图中项目的位置? 如果我有这个职位,我可以做类似的事情

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

更新视图。但是如何获取 itemPosition?

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

有帮助吗?

【问题讨论】:

【参考方案1】:

ListView 不支持更新单个位置。

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

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

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

您将来可能要考虑更改为RecyclerViewRecyclerView 中使用的 BaseAdapter 支持添加/删除/更新单个位置等操作。

【讨论】:

嗯。我的 View v = mListView.getChildAt(itemPosition - mListView.getFirstVisiblePosition()); 版本似乎可以工作,但一旦我有了这个职位。但由于我无法以干净的方式获得itemPosition,我可能会在某个时候采纳您的建议并迁移到 RecyclerView。谢谢!

以上是关于通过 uri / 通过它包含的数据获取 ListView 项目位置的主要内容,如果未能解决你的问题,请参考以下文章

Dart Uri Api - 请求通过将 HTML 代码提供给问号来更改链接

Android 两个Activity之间怎样使用Uri传递图片,怎样获取图片的Uri,怎样通过Uri得到图片

Android获取数据库图片uri路径并用imageView显示

如何在android中获取通过wifi直接传输的文件的文件名?

Core Data - 通过 URI 获取托管对象

android选择图片,通过uri获取路径