从列表视图和显示中删除项目

时间:2013-08-20 06:32:57

标签: android listview

在我的代码中有一个listview,我在其中执行删除listview项的操作。它工作但仍然显示在列表视图中。它是在第二个活动中。它只在进入第一个活动后消失然后返回。请给我我必须做的更改。

Getclicker.java

public void onItemClick(AdapterView<?> a, View v, int position, final long id) {
                    AlertDialog.Builder adb=new AlertDialog.Builder(Getclicker.this);
                    adb.setTitle("Delete?");
                    adb.setMessage("Are you sure you want to delete the event" + (position+1));
                     final int positionToRemove = position;
                    adb.setNegativeButton("Cancel", null);

                        adb.setPositiveButton("Ok", new AlertDialog.OnClickListener() {
                            @Override
                            public void onClick(DialogInterface dialog, int which) {

                                eventsData1.delete( id);
                                adapter.notifyDataSetChanged();
                            }});
                        adb.show();
                    }
  

数据库中的删除方法

public void delete(long id) {
        SQLiteDatabase db = this.getReadableDatabase();

        db.delete(DATABASE_TABLE, KEY_ROWID + " = ?",
                new String[] { String.valueOf(id )});
        db.close();
    }

3 个答案:

答案 0 :(得分:1)

正如我所看到的,您现在正在从数据库中删除某个项目,但您并未将其从适配器中删除,这就是为什么已删除项目仍在ListView中的原因。当您转到另一个活动然后返回listView时,您将在适配器中加载更改的数据。

如果希望notifyDataSetChanged()产生效果,您也应该从适配器中删除一个项目。 。

您的代码应该是这样的:

eventsData1.delete( id);
adapter.deleteItem(id);
adapter.notifyDataSetChanged();

在Adapter类中添加delete()方法。 。

答案 1 :(得分:1)

您正在删除ID,即Long Type

eventsData1.delete( id);

你应该使用“位置”

eventsData1.delete(position);
adapter.notifyDataSetChanged();

答案 2 :(得分:0)

正如您所说,您的删除操作工作正常,但问题出在listView刷新。直到除非您要更改活动,否则它不会刷新您的列表。您必须要做的是,您必须在行末尾添加这段代码,其中删除操作在onItemClick中结束:

 yourListView.setAdapter(yourAdapter);