繁体   English   中英

复选框状态无法正常工作

[英]check box state not working properly

我正在使用具有复选框的ListView 单击复选框并滚动后,复选框状态无法正常工作。

我试图看一个类似的StackOverflow 问题,但是这些解决方案对我不起作用。

这是我的Adapter代码:

  private class CustomerEventsAdapter extends BaseAdapter {
            private Context myContext;
            private ArrayList<Events> myEventArrayList;

            private LayoutInflater mInflater;
            private Boolean isSelected = false;

            public EventsAdapter(Context ctx, ArrayList<Events> theArrayListEvents) {
                this.myContext = ctx;
                this.myEventArrayList = theArrayListEvents;
                mInflater = LayoutInflater.from(ctx);

            }

            @Override
            public int getCount() {
                return myEventArrayList.size();
            }

            @Override
            public Object getItem(int i) {
                return myEventArrayList.get(i);
            }

            @Override
            public long getItemId(int i) {
                return i;
            }

            @Override
            public View getView(final int i, View convertView, ViewGroup viewGroup) {
                View view = convertView;
                if (view == null) {
                    view = mInflater.inflate(R.layout.event_item_list, null);
                    final ViewHolder holder = new ViewHolder();


                    holder.myCheckBoxCustomerEventItem = (CheckBox) view.findViewById(R.id.checkBoxCustomerEventItem);





                    holder.myCheckBoxCustomerEventItem.setOnClickListener(new View.OnClickListener() {

                        @Override
                        public void onClick(View v) {
                            Events events = myEventArrayList.get(i);
                            //is chkIos checked?
                            if (((CheckBox) v).isChecked()) {
                                holder.myCheckBoxCustomerEventItem.setChecked(true);
                                eventsInfo.setMyIsSelected(true);
                            } else {
                                holder.myCheckBoxCustomerEventItem.setChecked(false);
                                eventsInfo.setMyIsSelected(false);
                            }
                            //case 2

                        }
                    });




                    view.setTag(holder);

                }

                if (view != null) {
                    ViewHolder holder = (ViewHolder) view.getTag();
                    Events eventsInfo = myEventArrayList.get(i);

                    boolean isChecked = eventsInfo.getMyIsSelected();


                    if (isChecked) {
                        holder.myCheckBoxCustomerEventItem.setChecked(true);


                    } else {
                        holder.myCheckBoxCustomerEventItem.setChecked(false);


                    }
                }

                return view;
            }
        }

谢谢。

在适配器中实现getView方法的基本规则是,仅当没有可重用的视图时才对视图进行膨胀,但每次调用getView时都更新所有视图。

万一convertView == null您没有设置Checkbox属性。 CheckBox具有一个OnCheckedChangeListener ,您可以使用它来识别状态更改,而不是处理对其的单击。

将您的getView方法更改为:

@Override
public View getView(final int i, View convertView, ViewGroup viewGroup) {
    View view = convertView;
    if (view == null) {
        view = mInflater.inflate(R.layout.event_item_list, null);
        ViewHolder holder = new ViewHolder();

        holder.myCheckBoxCustomerEventItem = (CheckBox) view.findViewById(R.id.checkBoxCustomerEventItem);

        holder.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() {
            @Override
            public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) {
                myEventArrayList.get(i).setMyIsSelected(isChecked);
            }
        });

        view.setTag(holder);
    }

    ViewHolder holder = (ViewHolder) view.getTag();
    Events eventsInfo = myEventArrayList.get(i);

    boolean isChecked = eventsInfo.getMyIsSelected();

    holder.myCheckBoxCustomerEventItem.setChecked(isChecked);

    return view;
}

暂无
暂无

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

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