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

时间:2010-06-01 21:12:53

标签: android listview

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

谢谢,

6 个答案:

答案 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中。

请注意,此方法对于图库视图也完全相同。