0

嗨,我正在创建一个带有动态复选框的自定义列表视图,添加了我想要的内容,但是当我尝试在第一行中选择一个复选框时,自动选择第 5、9、13 行中的第一个按钮,当我选择时第二行中的任何按钮然后第 6、8、12 行中的相同按钮被选中我在这里做错了什么和我的适配器类

class listViewEventscustomAdapter extends BaseAdapter {
    LayoutInflater mInflater;
    ViewHolder holder;

    public listViewEventscustomAdapter(Context context) {
        mInflater = LayoutInflater.from(context);

    }

    public int getCount() {
        if (arrListViewoption_title != null) {
            return arrListViewoption_title.size();
        } else {
            Toast.makeText(getApplicationContext(), "No item found",
                    Toast.LENGTH_LONG).show();
            return 0;
        }
    }

    public Object getItem(int arg0) {
        return arg0;
    }

    public long getItemId(int arg0) {
        return arg0;
    }

    @SuppressWarnings("unchecked")
    public View getView(final int position, View convertView,
            ViewGroup parent) {
        View v = convertView;
        final CheckBox checkitem;
        if (v == null) {
            LayoutInflater vi = (LayoutInflater) getSystemService(Context.LAYOUT_INFLATER_SERVICE);
            v = vi.inflate(R.layout.customlistviewdata, null);
        }
        if (v != null) {
            holder = new ViewHolder();
            holder.txtoptiontitle = (TextView) v
                    .findViewById(R.id.optiontitle);
            holder.txtsubtitle = (TextView) v.findViewById(R.id.subtitle);
            checkitem = (CheckBox) v.findViewById(R.id.checkBox1);
            holder.btn_radio = (RadioButton) v
                    .findViewById(R.id.radio0);

            holder.txtoptiontitle.setText(arrListViewoption_title
                    .get(position));
            holder.txtsubtitle.setText(arrlistViewsub_title.get(position));

            if (value.equals(arrListViewoption_type.get(position)
                    .toString().trim())) {
                checkitem.setVisibility(View.VISIBLE);
                holder.btn_radio.setVisibility(View.GONE);

            }

            else {
                holder.btn_radio.setVisibility(View.VISIBLE);
                checkitem.setVisibility(View.GONE);

            }

            checkitem
                    .setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() {

                        @Override
                        public void onCheckedChanged(CompoundButton view,
                                boolean isChecked) {
                            // int getPosition = (Integer) view.getTag();
                            // list.get(getPosition).setSelected(view.isChecked());

                            if (view.isChecked()) {

                                checkboxvalue.add(arrlistViewsub_title
                                        .get(position).toString().trim());
                            } else {
                                System.out
                                        .println("*************unchecked");
                                checkboxvalue.remove(arrlistViewsub_title
                                        .get(position).toString().trim());
                                adapter_list.notifyDataSetChanged();

                            }

                            Log.i(this.toString(),
                                    "Item" + checkboxvalue.size());

                        }
                    });

            holder.btn_radio
                    .setOnCheckedChangeListener(new OnCheckedChangeListener() {

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


                                // Action Doing here

                            }
                        }
                    });

            v.setTag(holder);

        }
        return v;

    }

}
4

1 回答 1

1

使用转换视图对于性能和快速滚动很有用,但可能会导致此类问题。

您应该在重用之前从转换视图重置任何设置值。在你的情况下:

boolean wasItemChecked = checkboxvalue.contains(arrlistViewsub_title.get(position).toString().trim());
checkItem.setChecked(wasItemChecked );

如果 checkItem 状态发生变化,它会根据数据源状态将其重置为真实状态。

希望有帮助。

于 2013-03-12T12:42:28.023 回答