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

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

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

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

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

有帮助吗?

【问题讨论】:

    标签: android listview android-listview android-cursoradapter


    【解决方案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。谢谢!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-11-01
    • 1970-01-01
    • 1970-01-01
    • 2022-07-10
    • 1970-01-01
    相关资源
    最近更新 更多