gpt4 book ai didi

android - 重绘 ListView 中的单行

转载 作者:IT王子 更新时间:2023-10-29 00:00:53 25 4
gpt4 key购买 nike

是否可以在 ListView 中重绘单行?我有一个 ListView,其中的行是 LinearLayout。我听取偏好更改,有时我只需要更改单行的 LinearLayout 内的一个 View。有没有办法让它重绘该行而不调用 listview.notifyDatasetChanged()

我尝试在 View (LinearLayout 内)上调用 view.invalidate(),但它不会重绘行。

最佳答案

饰演 Romain Guy explained a whileGoogle I/O session 期间返回,仅更新 ListView 中的一个 View 的最有效方法如下(此更新整个 View 数据):

ListView list = getListView();
int start = list.getFirstVisiblePosition();
for(int i=start, j=list.getLastVisiblePosition();i<=j;i++)
if(target==list.getItemAtPosition(i)){
View view = list.getChildAt(i-start);
list.getAdapter().getView(i, view, list);
break;
}

假设 target 是适配器的一项。

此代码检索 ListView,然后浏览当前显示的 View ,将您正在寻找的 target 项目与每个显示的 View 项目进行比较,以及您的目标是否在其中那些,获取封闭 View 并在该 View 上执行适配器 getView() 以刷新显示。

附带说明 invalidate() 不像某些人期望的那样工作,并且不会像 getView() 那样刷新 View ,notifyDataSetChanged() 将重建整个列表并最终为每个显示的项目调用 getview() 并且 invalidateViews() 也会影响一堆。

最后一件事,如果他只需要更改行 View 的 subview 而不是像 getView 那样更改整个行,也可以获得额外的性能。在这种情况下,以下代码可以替换 list.getAdapter().getView(i, view, list);(更改 TextView 文本的示例):

((TextView)view.findViewById(R.id.myid)).setText("some new text");

在我们信任的代码中。

关于android - 重绘 ListView 中的单行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4075975/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com