Listview не обновляется после обновления базы данных и adapter.notifyDataSetChanged ();
Я уже 2 дня просматривал сеть и много чего пробовал, но не могу понять, что с этим не так.
Я все еще довольно новичок в разработке Android, поэтому я, вероятно, пропустил что-то очевидное.
У меня есть приложение, которое использует базу данных sqllite для хранения некоторых данных и для этого доказательства концепции, отображающего их в виде списка. Я могу добавлять элементы в список, удалять их.
Все идет нормально. Проблема у меня возникает, когда я вместо удаления обновляю столбец в базе данных с именем «удаленный» и устанавливаю его равным 1, а затем получаю адаптер для обновления списка. Кажется, не работает.
Если я использую оператор удаления, он работает. Он обновляется, и все в порядке, но я хочу, чтобы удаленные элементы были в базе данных, а не отображать их (так что, в основном, «скрывающие» элементы)
Если я проверяю базу данных, само обновление завершается успешно после изменения столбца и всего, поэтому я предполагаю, что это проблема обновления, потому что адаптер не запрашивает базу данных или что-то в этом направлении
Загрузчик Listview:
public void fillData() {
if(lw.getAdapter() == null){
// Fields from the database (projection)
// Must include the _id column for the adapter to work
String[] from = new String[] { TodoTable.COLUMN_SUMMARY, TodoTable.COLUMN_ID};
String where = TodoTable.COLUMN_DELETED + " = ?";
Cursor cursor = getContentResolver().query(TodoContentProvider.CONTENT_URI,from,where,new String[] {"0"},null);
// Fields on the UI to which we map
int[] to = new int[] { R.id.label };
adapter = new SimpleCursorAdapter(this, R.layout.todo_row, cursor, from,
to, 0);
Log.v("Count",Integer.toString(cursor.getCount()));
lw.setAdapter(adapter);
}
else
adapter.notifyDataSetChanged();
}
Удалить функцию
@Override
public boolean onContextItemSelected(MenuItem item) {
switch (item.getItemId()) {
case DELETE_ID:
/* Code for actual delete
AdapterView.AdapterContextMenuInfo info = (AdapterView.AdapterContextMenuInfo) item
.getMenuInfo();
Uri uri = Uri.parse(TodoContentProvider.CONTENT_URI + "/"
+ info.id);
getContentResolver().delete(uri, null, null);
fillData();
*/
/* Code for update and hide */
AdapterView.AdapterContextMenuInfo info = (AdapterView.AdapterContextMenuInfo) item
.getMenuInfo();
Uri uri = Uri.parse(TodoContentProvider.CONTENT_URI + "/"
+ info.id);
ContentValues values = new ContentValues();
values.put(TodoTable.COLUMN_DIRTY, 1);
values.put(TodoTable.COLUMN_DELETED, 1);
getContentResolver().update(uri,values,null,null);
fillData();
return true;
}
return super.onContextItemSelected(item);
}
если я помещаю журнал в функцию запроса ContentProvider, он фактически не запускается.
Любые предложения о том, как это выяснить?
Если я используюadapter.swapCursor(cursor);
он работает нормально, просто не знаю, правильно ли это делать.
public void fill,Data() {
// Fields from the database (projection)
// Must include the _id column for the adapter to work
String[] from = new String[] { TodoTable.COLUMN_SUMMARY, TodoTable.COLUMN_ID};
String where = TodoTable.COLUMN_DELETED + " = ?";
Cursor cursor = getContentResolver().query(TodoContentProvider.CONTENT_URI,from,where,new String[] {"0"},null);
// Fields on the UI to which we map
int[] to = new int[] { R.id.label };
if(lw.getAdapter() == null){
adapter = new SimpleCursorAdapter(this, R.layout.todo_row, cursor, from,
to, 0);
Log.v("Count",Integer.toString(cursor.getCount()));
lw.setAdapter(adapter);
}
else
{
adapter.swapCursor(cursor);
}
}
Ты за помощь