简体   繁体   English

在自定义列表视图中使用的带有Android中RadioButton的列表视图复选框?

[英]Listview Checkbox with RadioButton in android used in custom listview?

Hi i am creating a custom list view with dynamic check box adding that i am getting what i want but when i try to select one check box in first row then automatically first button in 5th ,9th,13 row is getting selected and when i select any button in second row then same button in 6th,8th,12th row is getting selected what i am doing wrong here and my adapter class 嗨,我正在创建一个带有动态复选框的自定义列表视图,添加了我想要的东西,但是当我尝试选择第一行中的一个复选框,然后自动选择了第5、9、13行中的第一个按钮时,当我选择了第二行中的任何按钮,然后第六,第八,第十二行中的同一按钮被选中,我在这里做错了什么,我的适配器类

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;

    }

}

Using the convertview is usefull for performancce and fast scrolling but can lead to that kind of problem. 使用convertview对性能和快速滚动很有用,但可能会导致这种问题。

you should reset any set values from the convert view before reusing it. 您应该在重新使用转换视图之前重置所有设置值。 In your case : 在您的情况下:

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

if the checkItem state has changed, it reset it to its true state according to the datasource state. 如果checkItem状态已更改,则会根据数据源状态将其重置为true状态。

hope that helps. 希望能有所帮助。

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

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