繁体   English   中英

我的自定义listView与复选框和imageViews奇怪的行为

[英]My custom listView with Checkboxes and imageViews Strange Behaviour

我有一个包含使用ImageLoader (框架)加载的图像的ListView和每个图像的复选框。我有一个适配器,它为此ListView扩展了BaseAdapter ,当我检查其中一个复选框并滚动它时,我看到了其他复选框会自动检查。 有什么办法可以解决我的问题。 请有人给我一个线索或例子。

这是因为这些行正在被重用,因此您需要为每行设置一些属性,以告知该行是否已选中。 然后在您的getView()执行“ if and else”语句,以查看该行是否被选中,以及是否仅对其进行检查,否则保持未选中状态。

我建议您使用一个布尔数组,在该数组中您对列表中的每个位置都保持选中状态。 ListView在滚动时重新创建列表元素,因此您的检查可能被弄乱了。 这意味着您必须检查要实例化的元素位置的布尔值是否为true,然后使用checkBox.setChecked(true)或checkBox.setChecked(false)。

简单,

Set<String> bs = new HashSet(String);

String[] bid;

并将其写在您的getView方法中,将其作为模板。 不作为解决方案

public View getView(final int position, View convertView, ViewGroup arg2) {
            row = convertView;
            if (row == null)
            {
                LayoutInflater vi = (LayoutInflater)getSystemService(Context.LAYOUT_INFLATER_SERVICE);
                row = vi.inflate(R.layout.your_listview,null);
            }

            check = (CheckBox) row.findViewById(R.id.your_checkboxid);
            check.setOnCheckedChangeListener(new OnCheckedChangeListener() {

                @Override
                public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) {
                    if(isChecked)
                    {
                        bs.add(bid[position]);
                    }
                    else
                    {
                        if(bs.contains(bid[position]))
                        {
                            bs.remove(bid[position]);
                        }
                    }

                }
            });

            if(bs.contains(bid[position]))
            {
                check.setChecked(true);
            }
            else
            {
                check.setChecked(false);
            }   
            return row;
        }

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM