【问题标题】:How to delete an item from both database as well as listview Android?如何从数据库和 listview Android 中删除项目?
【发布时间】:2012-09-10 05:14:25
【问题描述】:

使用 Arrayadapter 在列表视图上显示存储在数据库中的元素。现在我想从列表视图和数据库中删除项目。请帮我解决。

【问题讨论】:

  • 试试this例子
  • SpK提供的样品就是你需要的那个
  • 从数据库中删除并在列表中使用 notifyChange

标签: java android


【解决方案1】:

要从数据库中删除行,请尝试使用示例 http://codinglookseasy.blogspot.in/2012/08/sqlite-database.html。从数据库中删除后,从 arrayadapter 中删除项目并使用 adapter.notifyDataSetChanged() 从列表视图中删除它

【讨论】:

  • 它可以帮助我从数据库中删除项目,但我不想只在单击删除按钮时删除表中的所有行,列表视图上突出显示的或第一个项目应该删除。我该怎么做?
  • 考虑在删除语句中使用 Where 子句,例如 delete from tablename where columnind = theselected item
  • 考虑在删除语句中使用 Where 子句,例如 delete from tablename where columnind = theselected item
  • 正如你所说,我已经完成了,但它会删除完整的列表视图本身,而不是我需要从列表视图中删除第一项。@Sharath G
【解决方案2】:

考虑使用游标适配器将列表视图绑定到您的数据库表。这里有一个例子:http://thinkandroid.wordpress.com/2010/01/09/simplecursoradapters-and-listviews/

该示例使用了已弃用的“startManagingCursor”,它已被弃用,取而代之的是 CursorLoader。一旦你最终实现了 CursorLoader,它就很好了。您注册了一些侦听器,您的 UI 会立即更新以反映对 db 的任何更改(无需手动添加/删除列表视图中的行)。

查看What are the benefits of CursorLoaders?

【讨论】:

  • 我使用 ArrayAdapter 在 listview 上显示。现在我只能在 Db 清除并重新启动活动时删除项目,它也将在下次它不会删除时工作一次。
  • 使用ArrayAdapter的“remove(T obj)”方法怎么样?然后调用 ArrayAdapter 的“notifyDataSetChanged()”来更新 UI。
  • 不,即使我也尝试过,但没有用,因为数据存储在数据库中,试图在 listview 上删除根本不会生效。
  • 嗯,是的,您仍然需要删除数据库中的条目。 @Sharath G 在他的答案中提供了一个链接,可以帮助您做到这一点。因此,当您结合这两种方法时,您将有效地从数据库和列表视图中删除该项目。
  • 是的,如果我从 DB 中删除了数据,则意味着 listview 上没有显示任何内容。我想点击删除按钮,它应该从 listview 以及 DB 中删除项目。我像 @Sharath G 那样做提供的链接,但它会从数据库中删除所有数据,不像我需要的那样。@rposky
【解决方案3】:

这是我的代码:

Cursor c = db.rawQuery("SELECT * FROM BOOKMARKS", null);

ID = c.getColumnIndex("ID");

            audiotime=c.getColumnIndex("BookmarkTime");
            // Check result.
            c.moveToFirst();
            if (c != null) 
            {
                // Loop through all Results
                do 
                {
                    /*String str=c.getString(ID);
                    audiobooks.add(str);*/
                    str=c.getString(audiotime);
                    audiobooks.add(str);
}
                while(c.moveToNext());

                c.close();
                db.close();

                //TODO
                arrayAdapter=new ArrayAdapter<String>(this,  R.layout.row3, R.id.itemr1,audiobooks);
                lv.setAdapter(arrayAdapter);
cursor.close();
        db.close(); //close db resources
}
public void onClick(View v) 
{
if(v.getId()==R.id.Delete)
{

db = openOrCreateDatabase("DB", 0, null);
db.delete("BOOKMARKS", null, null);

int j=lv.getCount();
                Toast.makeText(GetAudioBookmarks.this, " after delete listview count  " +j,Toast.LENGTH_SHORT).show();



}

我无法做到这一点,因为我只将书签字符串添加到列表视图。我已经粘贴了我的代码,它将从数据库中获取数据并添加到列表视图中。现在我的代码将工作,如果我点击删除将删除 DB 上的所有项目,但 listview 计数将与它保持的值相同,但不会在 listview 上显示任何数据。

【讨论】:

  • 所有项目都将从您的数据库表中删除,因为您没有指定 WHERE 子句。您需要像这样调用该方法:db.delete("BOOKMARKS", "ID=" + bookmarkid, null)。什么视图进入您的“OnClick”监听器?这可能会决定您如何获得书签 ID,
  • 如果我指定了where子句,它不会删除任何东西。
  • 我将在删除但不删除该项目时从列表视图中获取第一个项目。我不知道是什么原因。
  • 嘿,它现在对我有用,我从表中删除了主键,它正在工作。谢谢你的帮助。@rposky
猜你喜欢
  • 1970-01-01
  • 2012-01-27
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-06-09
相关资源
最近更新 更多