通过 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
将重新绘制可见项目(它不会重新绘制整个一次列出..只有可见的项目)。
以后可以考虑换成RecyclerView
。 RecyclerView
中使用的 BaseAdapter
支持 add/remove/update 单个位置等操作。
我有一个使用自定义 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
将重新绘制可见项目(它不会重新绘制整个一次列出..只有可见的项目)。
以后可以考虑换成RecyclerView
。 RecyclerView
中使用的 BaseAdapter
支持 add/remove/update 单个位置等操作。