回答
你可以,但它有点复杂。您必须获取列表中第一个可见项目的索引,然后使用它来确定该项目需要更新的可视项目列表的距离,然后获取其视图并在那里更新它。
只需拨打notifyDatasetChanged()
就容易多了。你
以及如何获得列表中第一个项目的索引?可能有性能的原因,为什么刷新整个列表是不可取的 – Marchy 2012-03-31 03:14:02
你只需要在ListView上调用'getFirstVisiblePosition()'。 http://developer.android.com/reference/android/widget/AdapterView.html#getFirstVisiblePosition() – CaseyB 2012-04-02 16:56:59
@CaseyB可以帮助我解决这个问题http:// stackoverflow。com/questions/18312539/update-the-value-of-item-in-the-listview-android?noredirect = 1#comment26873838_18312539 – Developer 2013-08-19 12:36:20
也可以使用此:
myListView.invalidateViews();
似乎不起作用。 – manmal 2012-02-27 11:17:03
它可以工作,但大部分时间都会延迟重绘所有页面。 – AVEbrahimi 2015-02-10 07:05:51
dataAdapter.remove(dataAdapter.getItem(clickedpos));
dataAdapter.insert(t.getText().toString(), clickedpos);
你需要保持你的适配器的轨道(或定制适配器如果您在花哨的功能设置)。当您更改项目的数据时,只需在适配器中更改您感兴趣的字段。 然后调用notifyDatasetChanged,这些更改将反映在您的列表视图中。
请注意,此方法对于图库视图也完全相同。
你不能渲染(刷新)单行,而是你可以得到所要求的视图,并直接通过调用yourListView.getChildAt(int VisiblePosition);
,其中visiblePostion是在ListView减去位置yourListView.getFirstVisiblePosition()
这个方法使它chages :
View v = listViewItems.getChildAt(position -
listViewItems.getFirstVisiblePosition());
v.setBackgroundColor(Color.GREEN);
我希望这有助于...
当然,它确实有帮助..感谢很多 – 2013-06-11 18:04:00
+1:这正是我正在寻找。 – PeteH 2013-06-16 21:34:56
+10这真的在我的应用程序中节省了很多实施 – 2014-02-24 15:55:28
这是我做的:
您的项目(行)必须具有唯一的ID,以便稍后进行更新。当列表从适配器获取视图时,设置每个视图的标记。 (您也可以使用键标签如果默认标签用于其他地方)
@Override
public View getView(int position, View convertView, ViewGroup parent)
{
View view = super.getView(position, convertView, parent);
view.setTag(getItemId(position));
return view;
}
对于更新检查列表的每一个元素,如果与给定id的看法是有它的可见的,必须对其执行更新。
private void update(long id)
{
int c = list.getChildCount();
for (int i = 0; i < c; i++)
{
View view = list.getChildAt(i);
if ((Long)view.getTag() == id)
{
// update view
}
}
}
它实际上比其他方法更容易,当你处理ID不是位置时更好!此外,您必须考虑情景,以便您的视图再次隐身并可见。
标签的想法帮助我解决了这个问题 - 我从同一个布局文件中获得动态数量的视图,并且不得不以某种方式检查我是哪一个改变。 – JakeP 2014-07-23 11:02:04
- 1. 刷新列表视图项目android
- 2. 是否可以重新排列列表视图中的项目?
- 3. 是否有可能选择一个自定义列表视图项目与其列表项目ID而不是Android中的列表项目位置?
- 4. 列表视图刷新android
- 5. Android列表视图刷新
- 6. Android列表视图刷新
- 7. 刷新Android列表视图
- 8. 如何删除一个项目并刷新列表视图
- 9. 是否有可能在另一个嵌套列表视图?
- 10. android自动刷新列表视图项目
- 11. 在Android中刷新列表视图
- 12. Android:列表视图,其中每个项目是一个Web视图
- 13. 列表视图项目android
- 14. 是否有可能在1 Android中有2个项目?
- 15. 是否有可能让两个项目共享一个主视图?
- 16. 删除Android Studio中的项目后刷新列表视图的问题
- 17. 是否有可能在一个listView项目中有两个TextView?
- 18. 是否有可能从列表中的项目获取索引?
- 19. 如何刷新从另一个选项列表中的列表视图
- 20. 是否有可能从参数列表中删除一个项目?
- 21. 刷新列表视图点击该列表视图中的一个按钮
- 22. 是否有可能在intellij想法中有两个项目视图
- 23. 是否有可能在Android的单独的类中添加列表视图?
- 24. 刷新可扩展列表视图
- 25. 可扩展列表视图刷新
- 26. Android:是否有可能在tabview中的鳍状肢有一个滚动视图?
- 27. 是否有可能在列表视图中始终启用fastscroll?
- 28. 如何在vb6的列表视图中选择一个项目(可能是项目行)?
- 29. 这是可能获得列表视图项目在Android的子位置?
- 30. 是否有可能在一个表中有两个FILESTREAM列?
确实,notify ...告诉列表适配器已被修改。我不确定你可以更新一个元素。 – Sephy 2010-06-01 21:46:41
这里有一个类似的SO问题:http://stackoverflow.com/questions/3724874/android-update-single-item-in-list – 2010-12-21 19:28:14
的Google,要注意**这些问题是非常非常古老的**。对于现代Android(2014+),您只需使用notifyDatasetChanged。它效率非常高,只能重画屏幕上的内容。这些天使用现代“HolderView”模式至关重要。所以这都不是问题。 – Fattie 2014-06-26 14:42:44