【问题标题】:Android ListView repeating modified list itemsAndroid ListView 重复修改的列表项
【发布时间】:2014-06-13 00:03:58
【问题描述】:

我有一个ListView,其中包含一些列表项。每个项目都有一个删除按钮,它可以激活列表项顶部的另一层,以显示已删除的文本,如删除@987654322 中所示@在下面的代码中。

这些激活的overlays 经常重复自己(就像每8 个列表项一样),所以我猜android 是recycling 他们不知何故...... 我怎样才能使这个问题不再发生?

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;
}

列表项是FrameLayout,顶部是删除的图层(默认不可见),下面是有关该项目的信息。

【问题讨论】:

    标签: android listview recycle


    【解决方案1】:

    你说得对:列表视图是回收视图。您需要一些方法来跟踪哪些项目已在列表视图的控制之外“删除”。在您的情况下,听起来一个简单的数组就可以解决问题。

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

    @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 系统进行设置...谢谢您的回答!
    猜你喜欢
    • 1970-01-01
    • 2011-03-11
    • 2016-10-26
    • 1970-01-01
    • 2014-01-05
    • 1970-01-01
    • 1970-01-01
    • 2014-08-20
    • 2019-03-27
    相关资源
    最近更新 更多