У меня есть просмотр списка и моя реализация CursorAdapter.Как часть моего списка, у меня есть кнопка удаления.Когда пользователь нажимает кнопку, я показываю диалоговое окно с запросом подтверждения, и если пользователь нажимает «ОК», я удаляю элемент из базы данных.Проблема в обновлении списка.Я попытался вызвать cursor.requery () и mAdapter.notifyDataSetChanged () (отдельно или оба), но это не помогает.Requery очищает список, и он снова появляется (без отсутствующего элемента) после повторного входа в действие.notifyDataSetChanged ничего не делает (элемент все еще находится в списке), и снова все в порядке после повторного входа в действие.Мне удалось заставить это работать после перезагрузки всей базы данных:
//in the dialog:
{
DBAdapter db = new DBAdapter( getApplicationContext() );
db.open();
db.deleteTitle( rowid );
db.close();
//cursor.requery();
//mAdapter.notifyDataSetChanged();
fillData();
}
private void fillData() {
try{
db.open();
cursor = db.getAllTitles();
startManagingCursor(cursor);
mAdapter = new MyIDsListCursorAdapters(this, R.layout.myidsrow,
cursor, columns, to);
setListAdapter(mAdapter);
db.close();
}catch (SQLException e){
showDatabaseErrorDialog ();
}
}
Но перезагрузка всей базы данных кажется очень дорогой задачей, и я совершенно уверен, что должен быть лучший способ сделать это.
У меня также есть другая проблема - мои элементы списка определяются относительным макетом.Однако макет, похоже, игнорирует все «вертикальные» атрибуты, такие как alignParentBottom или centerVertical.Я видел Google I / O с Romain Guy, и он ответил на аналогичный вопрос, сказав, что мы должны передать родительскую ViewGroup, за которой следует false, функции inflate, но это все еще не решает мою проблему.Не знаю, что здесь происходит.Я решил это, разместив свои элементы под некоторыми другими и поиграв с полем / отступом, но мне не очень нравится это решение.