从arraylist中删除自定义对象返回false

时间:2014-04-23 02:55:18

标签: android arrays android-listview android-arrayadapter

我不知道我在这里做错了什么,我有一个由自定义对象配置文件组成的数组列表。当用户单击数组列表中的项目时,相应的对象将被添加或移除到tags数组。

现在发生的事情是当用户点击列表中的某个项目时,复选框将检查并将该项目添加到数组中,如果通过再次单击立即取消选中该框,则会从标记数组中删除该对象HOWEVER如果滚动列表并再次调用视图,则用户然后单击先前检查的项目标记。删除(配置文件)将返回。

这是扩展基础适配器的适配器。

class TagAdapter extends StandardAdapter {

    boolean[] checkedItems;
    int iconWidth;

    public TagAdapter() {

        checkedItems = new boolean[items.size()];

        registerDataSetObserver(new DataSetObserver() {

            @Override
            public void onChanged() {
                super.onChanged();
                updateProperties();
            }

        });

        iconWidth = MyApp.getScreenWidth() / 7;
    }

    void updateProperties() {
        checkedItems = new boolean[items.size()];
    }

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

        final ViewHolder viewHolder;

        if (convertView == null) {

            convertView = mLayoutInflater.inflate(R.layout.checkin_friend, parent, false);

            viewHolder = new ViewHolder();

            viewHolder.ivIcon = (CachedImageView) convertView.findViewById(R.id.ivIcon);
            viewHolder.tvName = (TextView) convertView.findViewById(R.id.tvName);
            viewHolder.cbFriend = (CheckBox) convertView.findViewById(R.id.cbFriend);

            convertView.setTag(viewHolder);

        }
        else {
            viewHolder = (ViewHolder) convertView.getTag();
        }

        final JsonObject item = getItem(position);
        final Profile profile = new Gson().fromJson(item, Profile.class);

        viewHolder.tvName.setText(profile.getUsername());

        if (profile.getIcon() != null) {

            viewHolder.ivIcon.set(app.imageContainer + profile.getIcon(), true);

        }
        else {
            viewHolder.ivIcon.setImageDrawable(app.defaultIcon);

        }

        viewHolder.ivIcon.setLayoutParams(new RelativeLayout.LayoutParams(iconWidth, iconWidth));



        viewHolder.cbFriend.setOnClickListener(new OnClickListener() {

            @Override
            public void onClick(View v) {


            }
        });

        viewHolder.cbFriend.setChecked(checkedItems[position]);

        convertView.setOnClickListener(new OnClickListener() {

            @Override
            public void onClick(View v) {

                boolean current = checkedItems[position];

                if (current == true) {

                    boolean modified = tags.remove(profile);

                    if(modified == false){
                        Log.d(MyApp.TAG,"modification was false");
                    }
                }
                else {
                    tags.add(profile);
                }

                checkedItems[position] = !current;

                viewHolder.cbFriend.setChecked(checkedItems[position]);

                updateUi();

            }
        });



        return convertView;

    }

    public class ViewHolder {
        CachedImageView ivIcon;
        TextView tvName;
        CheckBox cbFriend;
    }

}

错误发生在convertview上的点击侦听器上。

变量标签是由超类中定义的类型Profile组成的arraylist。

tags = new ArrayList<Profile>();

0 个答案:

没有答案