Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/ionic-framework/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在android中滚动列表时,已单击复选框未选中_Android - Fatal编程技术网

在android中滚动列表时,已单击复选框未选中

在android中滚动列表时,已单击复选框未选中,android,Android,在我的应用程序中,我有一个联系人列表…通过单击复选框,我可以添加联系人…同时更新联系人,我从数据库中获取已选中的复选框值,以向用户显示已单击的复选框…因此我从数据库中获取eventMO…滚动列表时,复选框变为未选中状态,然后下次选中时…像这样,它会产生问题 这是我的代码。请帮我找到解决方案 public View getView(int position, View convertView, ViewGroup parent) { ViewHolder holder

在我的应用程序中,我有一个联系人列表…通过单击复选框,我可以添加联系人…同时更新联系人,我从数据库中获取已选中的复选框值,以向用户显示已单击的复选框…因此我从数据库中获取eventMO…滚动列表时,复选框变为未选中状态,然后下次选中时…像这样,它会产生问题

这是我的代码。请帮我找到解决方案

 public View getView(int position, View convertView, ViewGroup parent) {

            ViewHolder holder = null;
            // Create a new row view
            if (convertView == null) {

                mInflater = (LayoutInflater) context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
                convertView = mInflater.inflate(R.layout.contactlist, null);
                holder = new ViewHolder();
                // Find the child views.
                holder.userNameTxtV = (TextView) convertView.findViewById(R.id.text);
                holder.mobileNumTxtV = (TextView) convertView.findViewById(R.id.mobile_number);
                holder.cb = (CheckBox) convertView.findViewById(R.id.check_box);

                // Optimization: Tag the row with it's child views, so we don't have
                // to
                // call findViewById() later when we reuse the row.

                convertView.setTag(holder);
            }
            //To reuse already existing rows
            else {
                holder = (ViewHolder) convertView.getTag();
                EventMO eventMO2 = (EventMO) getIntent().getParcelableExtra("eventMO");
                if (eventMO2 != null) {
                    if (userMOs.size() >= eventUserRelationMOs.size()) {
                        if (position <= eventUserRelationMOs.size() - 1) {
                            List<EventUserRelationMO> eventUserRelationMOs = eventMO2.getEventUserRelationBOs();
                            int isInvited = eventUserRelationMOs.get(position).getIsInvited();

                            if (isInvited == 1) {
                                holder.cb.performClick();
                            }
                        }
                    }

                }
            }
            holder.cb.setTag(userMOs.get(position));
            holder.userNameTxtV.setText(userMOs.get(position).getUserName());
            holder.mobileNumTxtV.setText(userMOs.get(position).getMobileNumber());
            holder.cb.setOnClickListener(new View.OnClickListener() {
                public void onClick(View v) {
                    CheckBox checkBox = (CheckBox) v;
                    UserMO userMO = (UserMO) checkBox.getTag();
                    userMO.setSelected(checkBox.isChecked());
                }
            });
            EventMO eventMO2 = (EventMO) getIntent().getParcelableExtra("eventMO");
            if (eventMO2 != null) {
                if (userMOs.size() >= eventUserRelationMOs.size()) {
                    if (position <= eventUserRelationMOs.size() - 1) {
                        List<EventUserRelationMO> eventUserRelationMOs = eventMO2.getEventUserRelationBOs();
                        int isInvited = eventUserRelationMOs.get(position).getIsInvited();

                        if (isInvited == 1) {
                            holder.cb.performClick();
                        }
                    }
                }

            }
            holder.cb.setChecked(userMOs.get(position).isSelected());
            return convertView;

        }

    }
public View getView(int位置、视图转换视图、视图组父视图){
ViewHolder=null;
//创建新的行视图
if(convertView==null){
mInflater=(LayoutInflater)context.getSystemService(context.LAYOUT\u充气机\u服务);
convertView=mInflater.充气(R.layout.contactlist,空);
holder=新的ViewHolder();
//查找子视图。
holder.userNameTxtV=(TextView)convertView.findViewById(R.id.text);
holder.mobileNumTxtV=(TextView)convertView.findViewById(R.id.mobile_编号);
holder.cb=(复选框)convertView.findViewById(R.id.check_框);
//优化:用行的子视图标记行,因此我们没有
//到
//稍后当我们重用行时调用findViewById()。
convertView.setTag(支架);
}
//重用现有行的步骤
否则{
holder=(ViewHolder)convertView.getTag();
EventMO eventMO2=(EventMO)getIntent().getParcelableExtra(“EventMO”);
if(eventMO2!=null){
if(userMOs.size()>=eventUserRelationMOs.size()){
if(position=eventUserRelationMOs.size()){
如果(位置尝试呼叫

    holder.cb.setOnClickListener(null);
之后

以前

    if (eventMO2 != null) {
在你的“else”块中

另一种方法是更换此部件:

if (isInvited == 1) {
    holder.cb.performClick();
}
为此:

 holder.cb.setChecked(isInvited == 1);

你能解释一下吗?上面的linecheckbox可能处于选中或未选中状态,因为它是从其他listItem回收的。而当你调用performClick checkbox时,只需将其状态切换为反向。假设复选框在选中状态下回收,isInvited为true->你调用performClick,复选框变为未选中。
 holder.cb.setChecked(isInvited == 1);