Android:ListViews和CheckBoxes的问题

Kyl*_*hes 7 java checkbox android listview

我有一个ListView,在每个列表项中我都有一些TextView和一个CheckBox.当我检查一个CheckBox并且我的onCheckedChangeListener触发时,一切正常.但是,一旦选中一个,就会检查随机的其他复选框.这是一个例子.

如果我点击第一个CheckBox:8被选中.检查15.检查21.检查27.检查33.检查41.然后如果我一直向上滚动,直到6都没有检查.下一个是13.

基本上......发生了什么?

Ran*_*ku' 10

您似乎正在重用在您实现convertViewgetView()方法上传递的内容.

Android会尝试对ListView中的不同项使用相同的视图.您将需要(1)手动取消选中/检查返回项目内的复选框(setChecked在getView上返回之前始终调用或(2)不使用convertView,但从getView返回新视图.

我认为(1)是推荐的.


Geo*_*zov 6

对我来说很好

public View getGroupView(int groupPosition, boolean isExpanded, View convertView, ViewGroup parent) {

        final ViewHolder holder;
        final Season season = (Season) getGroup(groupPosition);
        if (convertView == null) {
            LayoutInflater vi = (LayoutInflater) getSystemService(Context.LAYOUT_INFLATER_SERVICE);
            convertView = vi.inflate(R.layout.season, parent, false);
            holder = new ViewHolder();
            holder.title = (TextView) convertView.findViewById(R.id.season_title);
            holder.checkBox = (CheckBox) convertView.findViewById(R.id.season_check_box);
            convertView.setTag(holder);
        } else {
            holder = (ViewHolder) convertView.getTag();
        }

        holder.title.setText(season.getTitle());
        holder.checkBox.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() {
            @Override
            public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) {
                season.setChecked(isChecked);
                adapter.notifyDataSetChanged();
            }
        });

        holder.checkBox.setChecked(season.isChecked()); // position is important! Must be before return statement!
        return convertView;
    }

    protected class ViewHolder {
        protected TextView title;
        protected CheckBox checkBox;
    }
Run Code Online (Sandbox Code Playgroud)