Checkboxes in android listview having problem

后端 未结 3 555
臣服心动
臣服心动 2020-12-17 06:18

I have a listview with custom BaseAdapter and each row contains a checkbox and three textviews. I am using Layoutinflater to inflate this row from a xml file. However, every

相关标签:
3条回答
  • 2020-12-17 06:59

    Use the OnClickListener instead of OnCheckedChangeListener. The latter is triggered even when you update the recycled view to match the value of the object. In the following piece of code of a getView() I'm using an HashMap to store the check value of the objects (itemMap).

                boolean checked=itemMap.get(currentObject);
                if(checked!=checkBox.isChecked())
                    checkBox.setChecked(checked);
                checkBox.setOnClickListener(new View.OnClickListener() {
                    @Override
                    public void onClick(View v) {
                        CheckBox checkBox1=(CheckBox)v;
                        if(checkBox1.isChecked()) //ckecked
                        {
                            itemMap.put(currentObject,true);
                            if(checkListener!=null)
                                checkListener.onCheck(position,convertView,parent,adapter);
                        }
                        else{ //unchecked
                            itemMap.put(currentObject,false);
                            if(checkListener!=null)
                                checkListener.onUnCheck(position,convertView,parent,adapter);
                        }
                    }
                });
    

    checkListener is an additional listener that can be added by the user of the class.

    0 讨论(0)
  • 2020-12-17 07:00

    Avoid if (convertView==null) and else whole part It will definitely work for you. Thanks.

    0 讨论(0)
  • 2020-12-17 07:18

    the problem is definitely within your getView() method;

    Try something like this

    public View getView(int position, View convertView, ViewGroup parent) {
            View vu = convertView;
            ViewHolder vHolder = null;
            try {
                LayoutInflater inflater = (LayoutInflater) context
                        .getSystemService(Activity.LAYOUT_INFLATER_SERVICE);
                if (vu == null) {
                    vu = (View) inflater.inflate(R.layout.list_fr_req, null);
                    vHolder = new ViewHolder();
                    vHolder.checkbox = (CheckBox) vu.findViewById(R.id.my_ChkBox);
                    vu.setTag(vHolder);
                } else {
                    vHolder = (ViewHolder) vu.getTag();
                }
                vHolder.checkbox.setOnCheckedChangeListener(this);
    
                vHolder.checkbox.setId(position);
                vHolder.textView.setId(position);
    
                if (myList.get(position).getCheckedStatus())
                    vHolder.checkbox.setChecked(true);
                else
                    vHolder.checkbox.setChecked(false);
    
            } catch (Exception e) {
                Log.d("Exception in getview", e + "");
                e.printStackTrace();
            }
            return vu;
        }
    
        public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) {
            if (isChecked) {
                list.get(buttonView.getId()).setCheckedStatus(true);
            } else {
                list.get(buttonView.getId()).setCheckedStatus(false);
            }
        }
    
        public static class ViewHolder {
            CheckBox checkbox;
            TextView textview;
        }
    

    Regards: N_JOY.

    0 讨论(0)
提交回复
热议问题