로더 및 SimpleCursorAdapter를 사용하여 ContentProvider에서 데이터를로드하는 목록 조각이 있습니다. Google 지침에 명시된 지침을 올바르게 따라 왔지만 기본 데이터가 변경되면 ListView가 업데이트되지 않는다고 생각합니다. 이것은 내가 뭘하는지입니다 :SimpleCursorAdapter 및 ContentProvider와 함께 사용되는 Android 로더가 업데이트되지 않습니다.
컨텐트 프로
@Override
public synchronized Cursor query(Uri uri, String[] projection, String selection, String[] selectionArgs, String sortOrder) {
SQLiteQueryBuilder qb = new SQLiteQueryBuilder();
...
SQLiteDatabase db = dbHelper.getReadableDatabase();
Cursor c = qb.query(db, projection, selection, selectionArgs, null, null, orderBy);
c.setNotificationUri(getContext().getContentResolver(), uri);
return c;
}
ListFragment
@Override
public void onActivityCreated(Bundle savedInstanceState) {
super.onActivityCreated(savedInstanceState);
String[] dbColumns = new String[] { CheckpointsView.COL_TYPE, CheckpointsView.COL_DESCRIPTION };
int[] listColumnIds = new int[] { R.id.lci_img_icon, R.id.lci_txt_description };
adapter = new SimpleCursorAdapter(getActivity(), R.layout.listview_checkpoints_item, null, dbColumns, listColumnIds, 0);
...
setListAdapter(adapter);
getLoaderManager().initLoader(0, null, this);
}
@Override
public Loader<Cursor> onCreateLoader(int id, Bundle args) {
CursorLoader cursorLoader = new CursorLoader(
getActivity(),
CheckpointsView.CONTENT_URI,
CheckpointsView.LOADER_PROJECTION,
whereClause,
null,
null
);
return cursorLoader;
}
@Override
public void onLoadFinished(Loader<Cursor> loader, Cursor data) {
adapter.swapCursor(data);
}
@Override
public void onLoaderReset(Loader<Cursor> loader) {
adapter.swapCursor(null);
}
을 나는 데이터가 방금 추가 한 알고있는 코드의 어떤 시점에서, 나는 전화 트라이 adapter.notifyDataSetChanged();
, 하지만 작동하지 않았습니다.
는 하나 활동을 종료하고 다시 실행에 의해, 또는 뭔가를 놓치고 있습니까
getLoaderManager().destroyLoader(0);
getLoaderManager().initLoader(0, null, GreenScanFragment.this);
를 작성하여 수동 로더를 다시하여 목록 새로 고침을 할 수있는 유일한 방법은?