首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >当旧视图恢复时,Android setOnCheckedChangeListener再次调用。

当旧视图恢复时,Android setOnCheckedChangeListener再次调用。
EN

Stack Overflow用户
提问于 2013-06-29 04:01:28
回答 5查看 85.2K关注 0票数 35

我不能用getGroupView-method解决问题。

问题是监听器setOnCheckedChangeListener被调用了很多次。

假设我选中了某个复选框项。然后,我将其滚动出视图,然后再向后滚动。发生的情况是监听程序再次被调用。问题是我将checkbox-id存储在此侦听器内的数组列表中,以便稍后在代码中使用它。其结果是,每次调用侦听器时,都会将更多的元素添加到数组列表中,从而扭曲数据。

对此有解决方案吗?我该怎么办?例如,我是否应该注销监听程序?

代码语言:javascript
复制
@Override
 public View getGroupView(int groupPosition, boolean isExpanded, View convertView, ViewGroup parent) {
     View view = null;

     final int group_position = groupPosition;
     if (convertView == null) {
         LayoutInflater inflater = (LayoutInflater) context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
         view = inflater.inflate(R.layout.activity_phrase, parent, false);
         final ViewHolder viewHolder = new ViewHolder();
         viewHolder.text = (TextView) view.findViewById(R.id.groupTitle);
         viewHolder.checkBox = (CheckBox) view.findViewById(R.id.check);
         viewHolder.checkBox.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() {

            @Override
            public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) {
                // TODO Auto-generated method stub

                if (buttonView.isChecked()) {
                    checked.add((Integer) viewHolder.checkBox.getTag());
                }
                else {
                    checked.remove((Integer) viewHolder.checkBox.getTag());
                }

            }
        });

        view.setTag(viewHolder);
        viewHolder.checkBox.setTag(groupPosition);

     } else {
         view = convertView;
         ((ViewHolder)view.getTag()).checkBox.setTag(groupPosition);
     }

     ViewHolder holder = (ViewHolder) view.getTag();
     holder.text.setText(titles[groupPosition]);

     for (int i = 0; i < checked.size(); i++) {
         if (checked.get(i) == group_position) {
             holder.checkBox.setChecked(true);
         }
         else if (checked.get(i) != group_position) {
             holder.checkBox.setChecked(false);
         }
     }

     return view;
 }
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/17372750

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档