修改列表视图的所有子元素(不仅是可见元素)的正确方法是什么。我有一个默认设置为可见性消失的图像。我希望在用户单击按钮后使其可见(对于所有项目)。
谢谢!
修改列表视图的所有子元素(不仅是可见元素)的正确方法是什么。
关于 a 要了解的一件事ListView
是,并非所有列表项都是在任何给定时间生成(膨胀/填充)的。
例如,假设您的列表中Adapter
有 1000 个项目,但ListView
一次只能显示 10 个。创建所有 1000 个列表项将非常浪费资源(例如,内存)。
相反,只创建了 10 个可见项目,并且每次您从屏幕顶部或底部滚动一个项目时,已消失的项目会通过传递convertView
到Adapter's
getView
方法中来重新循环。
getView (int position, View convertView, ViewGroup parent)
要执行您的要求,您应该扩展Adapter
您希望使用的任何类型并覆盖该getView
方法。在该方法中检查是否convertView
存在null
。如果是,请扩充您自己的列表项布局实例。如果它不为 null,则重新使用 UI 元素(TextView
等ImageView
)。
要使所有ImageView
元素可见,请使用全局变量,Boolean
例如showImageView
将通过按下按钮进行切换。然后使用它getView
来决定是否设置ImageView
.
可能您应该根据某些字段值在ListAdapter
's中设置图像可见性。getView()
单击按钮后,您更改此字段值,然后调用ListAdapter.notifyDataSetChanged
列表视图以更新 -getView
然后调用并更改图像,因为您的字段值已更改。
在适配器内部getView()
,您抓取 ImageView 并将其可见性设置为消失:
ImageView iv = (ImageView)convertView.findViewById(R.id.image_view);
iv.setVisibility(buttonClicked ? View.GONE : View.VISIBLE);
然后当用户单击按钮时,设置buttonClicked = true
并调用notifyDataSetChanged()
以刷新 ListView。