Я работаю над небольшим списком приложений To-Do. Я использовал CursorLoader для обновления ToDolistview у поставщика контента. У меня есть написанная функция onNewItemAdded()
, которая вызывается, когда пользователь вводит новый элемент в текстовое представление и нажимает кнопку ввода. См. Ниже:
public void onNewItemAdded(String newItem) {
ContentResolver cr = getContentResolver();
ContentValues values = new ContentValues();
values.put(ToDoContentProvider.KEY_TASK, newItem);
cr.insert(ToDoContentProvider.CONTENT_URI, values);
// getLoaderManager().restartLoader(0, null, this); // commented for the sake of testing
}
@Override
protected void onResume() {
super.onResume();
//getLoaderManager().restartLoader(0, null, this); // commented for the sake of testing
}
public Loader<Cursor> onCreateLoader(int id, Bundle args) {
CursorLoader loader = new CursorLoader(this,
ToDoContentProvider.CONTENT_URI, null, null, null, null);
Log.e("GOPAL", "In the onCreateLoader");
return loader;
}
public void onLoadFinished(Loader<Cursor> loader, Cursor cursor) {
int keyTaskIndex = cursor.getColumnIndexOrThrow(ToDoContentProvider.KEY_TASK);
Log.e("GOPAL", "In the onLoadFinished");
todoItems.clear();
if (cursor.moveToNext() == false) Log.e("GOPAL", "Empty Cursor");
else {
while (cursor.moveToNext()) {
ToDoItem newItem = new ToDoItem(cursor.getString(keyTaskIndex));
todoItems.add(newItem);
}
aa.notifyDataSetChanged(); // aa is arrayadapter used for the listview
}
}
Я прочитал, CursorLoader автоматически обновляет представление, всякий раз, когда происходит изменение данных в db поставщика контента. Это означает, что я полагаю, getLoaderManager().restartLoader(0, null, this)
следует называть неявно всякий раз, когда происходит изменение данных, верно? Но этого не происходит. Всякий раз, когда я добавляю новый элемент (элемент добавляется в db из onNewItemAdded
, но restartLoader явно не вызывается), приостановите это действие и возобновите его. Я не вижу никакого неявного вызова restartLoader (даже если db изменен), и listview также не обновляется с добавленным добавленным элементом. Почему это? Как CursorLoader
автоматически обновляет представление, даже если приложение неактивно???
Спасибо:)
EDIT: я также использовал getContext().getContentResolver().notifyChange(insertedId, null)
вставить моего поставщика контента.