从listview中删除项目时的android问题

时间:2011-12-23 08:12:29

标签: android listview

我有一个列表视图,每行包含一些文本和一个删除按钮。 按下删除按钮时,必须删除该行。

我正在使用基础适配器,并且有一个全局列表,其中将显示项目。

请参阅下面的我的adpater代码

    public class JobCartListAdapter extends BaseAdapter {

    protected LayoutInflater mInflater;
    public JobCartListAdapter( Context mContext) {
        super();

        this.mContext = mContext;
        mInflater = LayoutInflater.from(mContext);
    }

    Context mContext;
    @Override
    public int getCount() {
        // TODO Auto-generated method stub
        return JobsManager.JobsCartList.size();
    }

    @Override
    public Object getItem(int arg0) {
        // TODO Auto-generated method stub
        return null;
    }

    @Override
    public long getItemId(int position) {
        // TODO Auto-generated method stub
        return 0;
    }

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

        if (convertView == null) {
            convertView = mInflater.inflate(R.layout.job_cart_row, null);
            holder = new ViewHolder();
            holder.text1 = (TextView) convertView.findViewById(R.id.title);
            holder.delete = (ImageButton)convertView.findViewById(R.id.delete);
            holder.delete.setOnClickListener(new View.OnClickListener() {
                @Override
                public void onClick(View view) {
                    Log.i("Remove from" , "" + position);
                    JobsManager.JobsCartList.remove(position)   ;
                    notifyDataSetChanged();
                }
            });
            convertView.setTag(holder);
        } else {

            holder = (ViewHolder) convertView.getTag();
        }

        holder.text1.setText(JobsManager.JobsCartList.get(position).getTitle());
        return convertView;
    }

    static class ViewHolder {
        TextView text1;
        ImageButton delete;
    }
}

我面临的问题是:

  1. 当我按第一次删除时,列表中的位置是正确的,该项目被删除,列表正在刷新

  2. 当我再次点击刷新列表中的一行时,传递给getview的相应位置不正确。因此,它导致索引超出绑定异常,因为该位置用作列表的索引。我检查了我的列表,并在添加和删除时正确更新。 它是列表适配器的问题。通过调用notifystatechanged刷新列表后,单击一行时,返回的行的位置不正确。

  3. 请帮助

1 个答案:

答案 0 :(得分:1)

您不必删除视图,只需按adapter.remove(adapter.getItem(position));删除关联对象 它将从列表中删除指定的对象&调用方法notifyDatasetChanged()