我想知道是否有可能只在列表视图中重新呈现一个元素?我假设通过调用notifyDatasetChanged()
将要重新列出整个列表?
谢谢,
答案 0 :(得分:19)
您不能渲染(刷新)单行,而是可以通过调用yourListView.getChildAt(int VisiblePosition);
来获取所请求的视图并直接对其进行调整,其中visiblePostion是ListView中的位置减去{{1} }
像这样:
yourListView.getFirstVisiblePosition()
我希望这会有所帮助......
答案 1 :(得分:11)
你可以,但这有点令人费解。您必须获取列表中第一个可见项的索引,然后使用它来确定项目所需更新的可视项目列表中的距离,然后获取其视图并在那里更新。
只需拨打notifyDatasetChanged()
即可。
答案 2 :(得分:3)
你也可以使用它:
myListView.invalidateViews();
答案 3 :(得分:3)
dataAdapter.remove(dataAdapter.getItem(clickedpos));
dataAdapter.insert(t.getText().toString(), clickedpos);
答案 4 :(得分:3)
我就这样做了:
您的项目(行)必须具有唯一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不是位置时更好!此外,您必须在视图不可见且再次可见时考虑方案。
答案 5 :(得分:1)
您需要跟踪适配器(如果您设置了花哨的功能,则需要跟踪自定义适配器)。更改项目的数据时,只需在适配器中更改您感兴趣的字段即可。 然后调用notifyDatasetChanged,更改将反映在listview中。
请注意,此方法对于图库视图也完全相同。