删除一个项目后刷新列表视图项目

时间:2015-02-24 09:39:41

标签: android listview

这个问题在我和这里遇到了很多机构,但我还没有看到一个有效的答案。 我有一个列表视图和列表中每个项目的删除按钮。当我点击按钮时,该项目将从数据库中删除,并从列表中删除,但列表视图不刷新项目。

我调用方法notifyDataSetChanged()但没有结果。(当项目被删除时,下一个项目的标题出现,似乎有两个项目有一个标题,一个接一个地排序)。 myListView.invalidateViews()myListView.invalidate()也不起作用。

究竟是什么原因,绝对解决方案是什么?

这是我的代码:

以下是整个代码:

public class AdapterNote扩展了ArrayAdapter {

public AdapterNote(ArrayList<StructNote> notes) {
    super(G.context, R.layout.adapter_note, notes);
}

private class ViewHolder {

    TextView     txtTitle;
    ImageView    imgDelete;


    public ViewHolder(View view) {
        txtTitle = (TextView) view.findViewById(R.id.txtTitle);
        imgDelete = (ImageView) view.findViewById(R.id.imgDelete);
    }

    public void fill(final ArrayAdapter<StructNote> adapter, final StructNote item, final int position) {
        txtTitle.setText(item.title + "");          
        imgDelete.setOnClickListener(new OnClickListener() {

            @Override
            public void onClick(View arg0) {
                G.notes.remove(item);
                adapter.remove(item);
                deleteDataFromDatabase(item.id);
                G.adapter.notifyDataSetChanged();

            }
        });
    }
}


@Override
public View getView(int position, View convertView, ViewGroup parent) {
    ViewHolder holder;
    StructNote item = getItem(position);
    if (convertView == null) {
        convertView = G.inflater.inflate(R.layout.adapter_note, parent, false);
        holder = new ViewHolder(convertView);
        convertView.setTag(holder);
    }
    else {
        holder = (ViewHolder) convertView.getTag();
    }
    holder.fill(this, item, position);
    return convertView;
}

}

6 个答案:

答案 0 :(得分:0)

根据列表索引从列表中删除项目或ArrayList属于适配器,然后尝试调用notifyDataSetChanged()

答案 1 :(得分:0)

您遇到的问题涉及具有相同标题部分的两个项目&#39;与侦听器和当前位置之间的同步丢失有关。如果您的自定义项类型为:

,请尝试这样的操作
Object item

将它放在视图中,与文本视图一起显示。在给视图充气后,请执行以下操作:

holder.item = getItem(position);

然后,而不是item.xx执行它:

holder.item.xx

答案 2 :(得分:0)

通过调用yourAdapterObject.remove(POSITION);

,您需要将其从适配器中删除,这很简单

此处,yourAdapterObject是适配器的对象,POSITION是您要从列表视图中删除的位置。

之后,您需要使用剩余的数据和信息刷新适配器。所以,你需要打电话如下:

yourAdapterObject.notifyDataStateChanged();

另外here是开发者网站提供的用于显示动画的动画演示。但他们还展示了如何从列表中删除项目并将其添加到列表中。一切正常,动画效果很好。

我想它会帮助你。

享受编码......:)

答案 3 :(得分:0)

只需将其从数组列表中删除,然后再次将适配器设置为列表视图。在 OnItemClickListener

中执行此操作
private OnItemClickListener listPairedClickItem = new OnItemClickListener() {
    @Override
    public void onItemClick(AdapterView<?> arg0, View arg1, int arg2, long arg3) {
        arrlist.remove(2);
        lv.setAdapter(adapter);
    }
};

答案 4 :(得分:0)

int pos = nameList.indexOf(object);
nameList.remove(pos);
listAdapter.notifyDataSetChanged();

答案 5 :(得分:0)

讨论的后期......

当我从使用适配器的类中执行此操作时,listview将不会刷新。更糟糕的是,有时它会更新,有时则不然。我打电话给adapter.notifyDataSetChanged();

最后,我通过制作一个直接在适配器中删除项目的方法来实现它,如下所示:

CustomAdapter extends BaseAdapter {

    public void deleteItem(AdapterItem ai) {
        dataList.remove(ai); /*dataList = data source used by adapter*/
        notifyDataSetChanged();   
    }
}