Android:是否可以刷新列表视图中的一个项目?

我想知道是否有可能只是在列表视图中重新显示一个元素? 我假设通过调用notifyDatasetChanged()是要重新整个列表?

谢谢,

你可以,但是有点复杂。 您将不得不获得列表中第一个可见项目的索引,然后使用它确定项目需要更新的可视项目列表中的多less,然后抓取其视图并在那里更新。

只要调用notifyDatasetChanged()就容易多了。

你不能渲染(刷新)单行,而是可以通过调用yourListView.getChildAt(int VisiblePosition);直接获取请求的视图并对其进行yourListView.getChildAt(int VisiblePosition); 其中yourListView.getFirstVisiblePosition()是ListView中的位置减去yourListView.getFirstVisiblePosition()

喜欢这个 :

  View v = listViewItems.getChildAt(position - listViewItems.getFirstVisiblePosition()); v.setBackgroundColor(Color.GREEN); 

我希望这有帮助…

你也可以使用这个:

 myListView.invalidateViews(); 
 dataAdapter.remove(dataAdapter.getItem(clickedpos)); dataAdapter.insert(t.getText().toString(), clickedpos); 

这是我做到的:

您的项目(行)必须具有唯一的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不是位置时更好! 当你的视图变得不可见和可见时,你也必须考虑情况。

您需要跟踪您的适配器(或者如果您设置了特殊的function,则需要自定义适配器)。 当您更改某个项目的数据时,只需在适配器中更改您感兴趣的字段即可。 然后调用notifyDatasetChanged,这些更改将反映在你的列表视图中。

请注意,这种方法对于图库视图也完全一样。