Checkbox auto call onCheckedChange when listview scroll?

前端 未结 5 935
终归单人心
终归单人心 2020-12-02 14:26

I have a problem with listview which list item contain a checkbox. When i check a box and scroll list, checkbox sometime auto call oncheckedchange and value of checkbox is c

5条回答
  •  再見小時候
    2020-12-02 14:57

    I am not sure if this is a neat way. But the below code solved my problem. Even in the below code, the setOnCheckChangeListener() was getting called (read falsely triggered) on scrolling of the list. The task was to maintain a list of items that have been selected by the user. So when there is a trigger, I first refer my list and only add an item if it was not already present in the list, else I ignore the callback.

    @Override
    public View getView(final int position, View convertView, final ViewGroup parent) {
    
    
        MenuViewHolder menuViewHolder = null;
        MenuView item = getItem(position);
    
    
        LayoutInflater inflater = ((Activity) context).getLayoutInflater();
    
        convertView = inflater.inflate(R.layout.food_menu_list_layout, null);
    
        TextView textView = ((TextView) convertView.findViewById(R.id.menu_item_entry));
        TextView price = (TextView) convertView.findViewById(R.id.price);
        CheckBox ordered = (CheckBox) convertView.findViewById(R.id.checkBox);
    
        menuViewHolder = new MenuViewHolder(textView, price, ordered);
    
        menuViewHolder.dishName.setText(menuViewList.get(position).getItemname());
        menuViewHolder.price.setText("$" + menuViewList.get(position).getPrice());
        menuViewHolder.ordered.setChecked(menuViewList.get(position).isSelected());
    
        menuViewHolder.ordered.setOnCheckedChangeListener(null);
    
    
        menuViewHolder.ordered.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() {
    
            @Override
            public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) {
    
                MenuView checkedItem = menuViewList.get(position);
                if (buttonView.isChecked()) {
    
                    //add item only if not already added
                    if (!checkedItem.isSelected()) {
                        MainActivity.menuViews.add(checkedItem);
                        checkedItem.setSelected(buttonView.isChecked());
                    }       
    
    
                } else {
    
                    //remove only if already added
                    if (checkedItem.isSelected()){
                        MainActivity.menuViews.remove(checkedItem);
                        checkedItem.setSelected(buttonView.isChecked());
                    }                    
                }
    
                ((MainActivity) context).displayCurrentSelectionAmt();
            }
        });
    
    
    return convertView;
    
    }
    

提交回复
热议问题