【问题标题】:android issue while removing item from listview从列表视图中删除项目时的android问题
【发布时间】:2012-09-10 23:26:18
【问题描述】:

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

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

请在下面查看我的适配器代码

    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 的相应位置不正确。因此,它导致索引超出范围异常,因为该位置用作 list 的索引。我检查了我的列表,它在 add 和 remove 上正确更新。 它是列表适配器的问题。调用 notifystatechanged 刷新列表后,点击某行时,返回的行位置不正确。

请帮忙

【问题讨论】:

    标签: android listview


    【解决方案1】:

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

    【讨论】:

    • 你能解释一下这个“适配器”的实际含义吗?我没有看到基本适配器的任何此类功能
    • 抱歉 preetha 我的错误实际上你的 converview 被重用了 & 删除的 onclicklistener 保持旧位置所以做一件事将位置设置为标签以删除按钮,如delete.setTag(position+""); & 在点击监听器中获取该标签如果 converview 不为空,按钮并在 getview 中删除,然后从 converView 中提取删除按钮并再次设置标签
    • 是的,问题是由于重复使用 converview。我将其更改为不重用,因为这似乎更容易。非常感谢。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2016-09-21
    • 1970-01-01
    • 1970-01-01
    • 2017-06-04
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多