0

こんにちは私は動的チェックボックスでカスタムリストビューを作成していますが、最初の行で1つのチェックボックスを選択しようとすると、5、9、13行の最初のボタンが自動的に選択されます。 2行目のボタン、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

convertview を使用すると、パフォーマンスと高速スクロールに役立ちますが、そのような問題が発生する可能性があります。

変換ビューを再利用する前に、設定値をリセットする必要があります。あなたの場合:

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

checkItem の状態が変更された場合、データソースの状態に従って true の状態にリセットされます。

それが役立つことを願っています。

于 2013-03-12T12:42:28.023 に答える