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