2014-01-27 139 views
0

我有一个列表视图中充满了来自数据库的数据的到来,我希望当我在项目上点击删除项问题从列表视图

消失,我用--list.remove(位置) - 但我有错误添加到列表中。

这里的列表视图:

private void populateListViewFromDB() { 
    Cursor cursor = db.getAllRecords(); 
    startManagingCursor(cursor); 
    String[] databaseColumnNames = new String[] { DBAdapter.col_Region }; 
    int[] toViewIDs = new int[] { android.R.id.text1, android.R.id.text2 }; 

    SimpleCursorAdapter myCursordapter = new SimpleCursorAdapter(this, 
      android.R.layout.simple_expandable_list_item_1, cursor, 
      databaseColumnNames, toViewIDs, FLAG_REGISTER_CONTENT_OBSERVER); 

    final ListView list = (ListView) findViewById(android.R.id.list); 
    list.setAdapter(myCursordapter); 

我在这里的代码时,我想删除一个项目:

list.setOnItemClickListener(new AdapterView.OnItemClickListener() { 
     public void onItemClick(final AdapterView<?> arg0, View arg1, 
       final int position, long arg3) { 
       list.remove(position); 
      adapter.notifyDataSetChanged();} 
+0

感谢了很多回应:) –

+0

请张贴stacktrace – Emmanuel

+0

这不是它的工作原理。您必须从数据库中删除该项目。 – njzk2

回答

1

没有ListView.remove()方法。您应该从数据模型中删除相应的项目,然后刷新您的适配器。

在你OnItemClickListener听众获得绑定的数据项:

Object itemObj = adapter.getItem(position); 

然后,从数据库中删除这个项目。

然后让你的光标的新实例,并更新你的光标适配器:

if (android.os.Build.VERSION.SDK_INT > android.os.Build.VERSION_CODES.GINGERBREAD){ 
    adapter.swapCursor(newCurosr); 
} else { 
    adapter.changeCursor(newCursor); 
} 

然后,通知有关数据的更改您的列表视图:

adapter.notifyDataSetChanged(); 
+0

感谢您的回答,我怎么能这样做,请你给我更多的细节! –

+0

有没有办法解决??!我的意思是我如何访问数据模型? –

+0

我已经更新了我的答案。您正在使用游标适配器,因此您的数据模型存储在数据库中。这意味着您应该更新您的数据库并创建新的光标并将其设置为您的适配器。 – Aleksey