0

로더 및 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); 

를 작성하여 수동 로더를 다시하여 목록 새로 고침을 할 수있는 유일한 방법은?

답변

0

나는 어리 석다! 많은 시간을 보낸 후, 나는 스스로 답을 찾기 위해 질문을 게시해야했습니다. context.getContentResolver().notifyChange(CheckpointsView.CONTENT_URI, null, false);으로 전화를 걸어 데이터를 업데이트하면 문제가 해결됩니다.