Я просматривал сеть в течение 2 дней allready и много пробовал, но не могу понять, что с этим не так.
Я до сих пор довольно новичок в разработке Android, поэтому я, вероятно, пропустил нечто очевидное.
У меня есть приложение, которое использует sqllite databse для хранения некоторых данных и для размещения этого Доказательства концепции, отображающего это в списке. Я могу добавить элементы в список, удалить их.
Пока все хорошо. Проблема заключается в том, что вместо того, чтобы удалять обновление столбца в базе данных с именем "deleted" и установить его на 1, а затем обновить список. Кажется, что это не сработало.
Если я использую оператор delete, он работает. Он обновляется, и все в порядке, но я хочу иметь удаленные элементы в базе данных, но не показывать их (так что "скрывать" элементы)
Если я проверю базу данных, то само обновление было успешно изменено и все, поэтому я думаю, что это проблема обновления, потому что адаптер не запрашивает базу данных или что-то в этом направлении
Listview Loader:
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();
}
Удалить functon
@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 fillData() {
// 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);
}
}
Ty для справки