2014-09-16 3 views
2

나는 이미지 갤러리가 있습니다. 업로드되거나 업로드되지 않은 아이콘이있는 이미지를 표시해야합니다. 서비스는 백그라운드에서 이미지를 업로드하고 데이터베이스를 업데이트하기 위해 실행 중입니다. 갤러리 화면에 있으며 업로드되지 않은 이미지가 업로드되어 데이터베이스를 업데이트합니다. 그래서 아무 버튼도 누르지 않고 내보기를 업데이트하고 싶습니다.데이터베이스 업데이트 및 업데이트 UI android

데이터베이스가 업데이트 될 때마다 콜백을받을 수있는 방법이 있습니까 ?? 다시로드하지 않고 내보기를 업데이트하는 가장 좋은 방법은 무엇입니까 ??

+0

주세요 http://stackoverflow.com/questions/3669325/notifydatasetchanged-example 참조 – Nabin

답변

0

CursorLoaders/CursorAdapters를 사용해야합니다. 당신은 될 것이라고 UI를 업데이트 할 수

0

두 가지 방법으로 여기에 예를

https://github.com/ksarmalkar/ContentProviderJoin을 찾을 수 있습니다

  • 당신이 이미지를 표시 할 어댑터를 사용하는 경우 사용할 수 있습니다

    NotifyDatasetChanged() 메소드 (나는 당신이 당신의 갤러리를 위해 어댑터를 사용하고 있다고 가정 할 것이다). 업로드가 완료 될 때마다이 메소드를 호출하여 뷰를 업데이트하도록 지시합니다.

  • 그렇지 않으면 자주 업로드 상태를 확인하는 AsyncTask를 실행하고 onProgressUpdate() 메소드는 이미지가 업로드되었음을 업데이트하기 위해 UI 스레드에 대한 콜백을 가지고 있습니다.

이 정보가 도움이되기를 바랍니다.

0

로더를 사용할 수 있습니다. 로더에는 다음과 같은 특징이 있습니다.

  • 모든 활동 및 단편에서 사용할 수 있습니다.
  • 비동기 적으로 데이터를로드합니다.
  • 콘텐츠가 변경되면 데이터 출처를 모니터링하고 새로운 결과를 제공합니다.
  • 구성 변경 후 다시 작성되면 마지막 로더의 커서에 자동으로 다시 연결됩니다. 따라서 데이터를 다시 쿼리 할 필요가 없습니다.

here 시작하기 도움말을 찾으십시오. 그래서

:

  • 먼저이 같은 및 로더 init을한다 :

getLoaderManager을().initLoader ([YOUR_LOADER_ID], null, this); 당신은() 콜백을 onLoadFinished 얻을

public Loader<Cursor> onCreateLoader(int id, Bundle args) { 
// You can return other type than cursor or create your own custom cursorloader but I guess that cursor is right fro you since you want load database content. 

Uri baseUri = [you media uri , suppose that you sue content provider]; 

return new CursorLoader(getActivity(), baseUri, 
     [projection], [select], [arg], 
     [orderby]); 

}

  • 데이터가로드 될 완료 :

    • 는 onCreateLoader에서로드 명령() 정의

      공공 무효를 onLoadFinished (로더 로더, 커서 데이터) { // 새 커서를 안으로 바꿉니다. (framewo rk가 돌아 오면 // 이전 커서를 닫습니다. mAdapter.swapCursor (data); }

    경우에 따라 로더는 갤러리 데이터베이스의 모든 변경 사항을 모니터링합니다. 따라서 변경이있을 때마다 스왑 커서가 자동으로 호출되고 어댑터에서 정의한대로 뷰가 업데이트됩니다.

    관련 문제