я сделать что-то, как показано ниже:Как обновить ListView при изменении курсора?
public class WhitelistActivity extends ListActivity {
private DbAdapter dbHelper;
private SimpleCursorAdapter adapter;
private Cursor recordsCursor;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.whitelist);
dbHelper = new DbAdapter(this);
dbHelper.open();
recordsCursor = dbHelper.fetchWhitelistRecords();
startManagingCursor(recordsCursor);
String[] from = new String[]{DbAdapter.KEY_W_SENDER};
int[] to = new int[]{R.id.text1};
adapter = new SimpleCursorAdapter(this, R.layout.whitelist_row, recordsCursor, from, to);
setListAdapter(adapter);
...
@Override
public boolean onContextItemSelected(MenuItem item) {
switch(item.getItemId()) {
case CONTEXT_MENU_DELETE_ID:
AdapterContextMenuInfo info = (AdapterContextMenuInfo) item.getMenuInfo();
dbHelper.deleteWhitelistRecord(info.id);
adapter.changeCursor(recordsCursor);
adapter.notifyDataSetChanged();
return true;
}
return super.onContextItemSelected(item);
}
Однако, когда контекстное меню вызывается и объект будет удален, это не отражается на списке. Что мне не хватает?
вам нужно либо запросить, либо воссоздать свой курсор. В вашем коде вы просто повторно используете его, не требуя, чтобы он отражал изменения. – njzk2
@ njzk2, как именно я должен это делать? Я ожидал, что это «changeCursor» или «swapCursor». –
либо заново создайте ('recordCursor = dbHelper.fetchWhitelistRecords();') курсор, либо запросите его ('recordsCursor.requery()') (но это устарело с api11. Я все еще упоминаю об этом при использовании startManagingCursor, который также устарел) – njzk2