动态更改ListView的每个项目的视图

时间:2013-02-21 19:05:23

标签: android listview children

我想在点击外部按钮时改变ListView的每个项目的图像的可见性(我的意思是它不属于ListView)。

所以我需要访问ListView的所有子视图。然后我像这样做了一个循环:

for (int i = 0...
{
     View child_view = list_view.getChildAt(i);
     ...
}

问题在于,通过这种方式,我只能访问当前可见的子项,并且我需要访问ListView每个子项的视图。

我怎么能这样做?

3 个答案:

答案 0 :(得分:1)

解决方案很简单

你的Adapter类中的

采用像这样的int数组

int visibilities[]={ImageView.VISIBLE,ImageView.GONE,ImageView.INVISIBLE};

如果您从Drawable Resources设置图像,则可能将ID传递给ArrayList项 像这样的东西

CountriesList.add(new Country("India",R.drawable.india));

在Country类中创建另一个变量(Your Bean类(Getter setter class)) 并将其设置为int 像这样的东西

class Country{
String name;
int flag;
int visibility;
}

在向列表中添加元素时传递这样的可见性

 CountriesList.add(new Country("India",R.drawable.india,1));

在适配器的getView()方法中,您可能会像这样设置资源

holder.image.setImageResource(country.getFlag());

也添加此行

holder.image.setVisibility(visibilities[country.getVisibility]);

为了解释这一点,我添加了国家示例..我在我之前的应用程序中使用了相同的技巧...它的功能就像魅力一样..我希望这会对你有帮助。

答案 1 :(得分:1)

我通过以下方式解决了问题:

  • 用以下内容更改所有可见的孩子:enter link description here

  • 更改适配器函数getView中的不可见子节点,因为重要的是,getView会在滚动时刷新。

答案 2 :(得分:0)

您当前的实现不起作用,因为使用list_view.getChildAt(i)将为当前不可见的所有视图返回null。相反,您可以在自定义适配器上调用方法。

for (int i = 0; i < customAdapter.getCount(); i++)
    {
            customAdapter.getItem(i).setVisibility();
            customAdapter.notifyDataSetChanged();
    }

程序示例:

  1. 使用getter / setter创建一个包含所需数据的类+ setVisibility(),它可以更改布尔值。
  2. 实现自定义ArrayAdapter。在getView中,检查当前项的布尔值是true还是false,并相应地设置View的可见性。
  3. 在您的Activity中实现上述代码示例。