0

我试图找出为什么微调器与 listView 中的复选框冲突。如果我评论微调线,复选框监听器工作正常,我可以选择它,检查是否被选中并删除列表的行。如果我让微调器声明,如下面的代码所示,监听器工作,我可以选择复选框,但是当我尝试获取所选项目(在checkToDelete方法)时,所选复选框的返回始终为空(就像那里没有选择)。我需要微调器来检查项目的数量和复选框来删除行。

无论如何,我已经研究了 2 天的解决方案,并且在知道发生了什么并防止将来出现错误之前不想让这个问题消失。我发现的一种可能的解决方案是避免使用微调器,而是使用带有 AlertDialog 的按钮

有谁知道我在这里想念什么?

 @Override
        public View getView(final int position,View convertView, ViewGroup viewGroup) {
            LayoutInflater inflater = (LayoutInflater) context
                .getSystemService(Context.LAYOUT_INFLATER_SERVICE);

            final View rowView = inflater.inflate(R.layout.menu_itens, viewGroup
                    , false);

            String itemName = MENU_ITEM.get(position);
            TextView item = (TextView) rowView.findViewById(R.id.item);     
                item.setText(itemName);
            imageView = (ImageView) rowView.findViewById(R.id.itemImage);

            checkBox[position] = (CheckBox) rowView.findViewById(R.id.check);
            checkBox[position].setTag(itemName);
            checkBox[position].setOnCheckedChangeListener(new OnCheckedChangeListener() {

                public void onCheckedChanged(CompoundButton buttonView,
                        boolean isChecked) {               
                        checkBox[position].setSelected(buttonView.isChecked());
                    }            
                });         
                spinner[position] = (Spinner) rowView.findViewById(R.id.quantity);
                spinner[position].setAdapter(spinnerAdapterArray[position]);
                spinner[position].setOnItemSelectedListener(new OnItemSelectedListener() {

                    @Override
                    public void onItemSelected(AdapterView<?> parent, View view,
                            int pos, long id) {
                        //Listener options      
                    }

                    @Override
                    public void onNothingSelected(AdapterView<?> parent) {
                        // TODO Auto-generated method stub              
                    }           
                });
                return rowView;
            }

      public List<Integer> checkListToDelete() {

        List<Integer> aux = new ArrayList<Integer>();   
        for(int i=0; i<MENU_SIZE; i++){
            System.out.println(checkBox[i].isChecked());
            if(checkBox[i].isChecked()){
                checkBox[i].setChecked(false);
                aux.add(i);
                }
            }   
        return aux; 
        }
4

1 回答 1

1
    private List<Boolean> mCheckList;

    @Override
    public View getView(final int position,View convertView, ViewGroup viewGroup) {
        LayoutInflater inflater = (LayoutInflater) context
            .getSystemService(Context.LAYOUT_INFLATER_SERVICE);

        final ViewHolder holder;
        if (convertView == null) {
            holder = new ViewHolder();
            convertView = inflater.inflate(R.layout.menu_itens, null);

            holder.textview = (TextView) convertView.findViewById(R.id.item);     
            holder.imageView = (ImageView) convertView.findViewById(R.id.itemImage);
            holder.checkBox = (CheckBox) convertView.findViewById(R.id.check);
            holder.checkBox.setOnCheckedChangeListener(new OnCheckedChangeListener() {
                @Override 
                public void onCheckedChanged(CompoundButton buttonView,
                    boolean isChecked) {               
                    mCheckList.set(position, isChecked);
                }            
            });

            holder.spinner = (Spinner) convertView.findViewById(R.id.quantity);
            holder.spinner.setAdapter(spinnerAdapterArray[position]);
            holder.spinner.setOnItemSelectedListener(new OnItemSelectedListener() {

                @Override
                public void onItemSelected(AdapterView<?> parent, View view,
                        int pos, long id) {
                    //Listener options      
                }

                @Override
                public void onNothingSelected(AdapterView<?> parent) {
                    // TODO Auto-generated method stub              
                }           
            });

            convertView.setTag(holder);
        }
        else {
            holder = (ViewHolder)convertView.getTag();
        }

        String itemName = MENU_ITEM.get(position);
        holder.textview.setText(itemName);
        holder.checkbox.setChecked(mCheckList.get(position));

        return convertView;
    }

    public List<Integer> checkListToDelete() {

        List<Integer> aux = new ArrayList<Integer>();   
        for(int i=0; i<MENU_SIZE; i++){
            System.out.println(mCheckList.get(i));
            if(mCheckList.get(i)){
                aux.add(i);
            }

            mCheckList.set(i, false);
        }

        notifyDataSetChanged();
        return aux; 
    }

    class ViewHolder {
        TextView textview;
        ImageView imageview;
        Spinner spinner;
        CheckBox checkbox;
    }
于 2014-05-21T13:16:11.730 回答