Android ListView重复修改的列表项

Android ListView重复修改的列表项,android,listview,recycle,Android,Listview,Recycle,我有一个列表视图,其中包含一些列表项。每个项目都有一个删除按钮,该按钮激活列表项目顶部的另一个层,以显示其已删除的文本,如以下代码中的删除onClickListener所示 这些被激活的overlays每隔一段时间就重复一次(就像每8个列表项一样),所以我猜android是在回收它们。。。 我怎样才能使这个问题不再发生 public View getView(int i, View view, ViewGroup viewGroup) { final AnnouncementHolder

我有一个
列表视图
,其中包含一些列表项。每个项目都有一个删除按钮,该按钮激活列表项目顶部的另一个层,以显示其已删除的文本,如以下代码中的删除
onClickListener
所示

这些被激活的
overlays
每隔一段时间就重复一次(就像每8个列表项一样),所以我猜android是在
回收它们。。。
我怎样才能使这个问题不再发生

public View getView(int i, View view, ViewGroup viewGroup) {
    final AnnouncementHolderItem holder;
    final View finalView = view;
    Item curr = getItem(i);
    if(view == null){
        LayoutInflater inflater = (LayoutInflater)activity.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
        view = inflater.inflate(R.layout.list_item, null);
        holder = new HolderItem(view);
        view.setTag(holder);
    } else {
        holder = (HolderItem) view.getTag();
    }
    holder.title.setText(curr.getTitle());
    holder.course.setText(curr.getName());
    holder.marker.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            Toast.makeText(activity, "Item starred!", Toast.LENGTH_SHORT).show();
        }
    });
    holder.delete.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            ((LinearLayout) finalView.findViewById(R.id.bottomLayer)).setVisibility(View.INVISIBLE);
            LinearLayout delete = (LinearLayout)finalView.findViewById(R.id.deleteLayer);
            delete.setVisibility(View.VISIBLE);
        }
    });
    holder.undelete.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            // Reverse of the delete + a toast message
        }
    });
    return finalView;
}

列表项是一个
框架布局
,上面是已删除的层(默认不可见),下面是关于该项的信息。

你完全正确:列表视图是循环视图。您需要一些方法来跟踪哪些项目在listview的控制之外被“删除”。在你的例子中,听起来一个简单的数组就可以了

下面是我用来做同样事情的代码示例。在本例中,它是一个复选框,其中所有复选框最初都未选中

@Override
public View getView(int position, View convertView, ViewGroup parent) {
    ViewHolder holder = null;
    if (convertView == null) {
        convertView = mInflater.inflate(R.layout.dialog_checkbox_item, null);
        holder = new ViewHolder();
        holder.checkbox = (CheckBox)convertView.findViewById(R.id.dialog_checkbox);
        convertView.setTag(holder);
    } else {
        holder = (ViewHolder)convertView.getTag();
        if (checkedArray[position] == true)
            holder.checkbox.setChecked(true);
        else
            holder.checkbox.setChecked(false);
    }
    holder.checkbox.setText((CharSequence) mData.get(position));
    return convertView;
}

好吧,那就用一个基本的MVC系统来设置它,然后。。。谢谢你的回答!