2012-03-23 3 views
1

내가 읽고 관련 Q &을 읽고 읽고 내 사용자 정의 컨텐트 프로는이 같은 것들 않는 경우 있음을 믿을 수 없어 믿을 수 없습니다ContentObserver - 그냥

insertUri = ContentUris.withAppendedId(Data2TableMetaData.CONTENT_URI, rowId) 
// notify listeners 
getContext().getContentResolver().notifyChange(insertUri, null); 

... ContentObservers 할을 rowId를 검색 할 방법이 없습니다.

정말입니까? 나는 이것이 단지 좋게 보이지 않기 때문에 나는 뭔가를 놓치고 있어야한다고 생각한다.

답변

1

당신 말이 맞습니다. 콜백 인터페이스에는 변경 내용에 대한 정보가 포함되어 있지 않으며 변경 사항이 발생했습니다. 그러나 일반적으로 개발자는 CursorLoaders와 같은 것을 사용하는 것이 좋습니다. http://developer.android.com/reference/android/content/CursorLoader.html

그러나 새로운 Android 16 api에서는 이제 OnChange 메소드에서 행의 URI를 검색 할 수 있습니다.

+0

감사합니다. CursorLoader가 내 질문에 어떻게 반응 하는지를 볼 수 없다 (나는 또한 Android 3.0 이전 임). 나는 아직도 뭔가를 놓치고 있어야한다고 생각한다! throw 된 경우 notifyChange URI에 rowId를 추가하는 목적은 무엇입니까? 콘텐츠 제공 업체에서 본 코딩 패턴을 이해하고 싶습니다. – Alex

+0

CursorLoader를 사용하면 행 ID 등을 신경 쓸 필요가 없습니다. 호환성 패키지를 사용하여 CursorLoaders pre Honeycomb를 사용할 수도 있습니다. 이제 원래 질문으로 돌아가십시오. 실제로 행 id를 uri에 추가 할 필요가 없습니다. 그러나 이렇게함으로써 당신은 단일 요소만을 듣는 내용 관찰자를 가질 수 있습니다. 그러한 관찰자는 그들이 분명히 듣고있는 이드를 분명히 알아야 할 것입니다. – Renard

+0

OK -하지만 여기에 내게 우스꽝스러운 간단한 상황이 있습니다. 사용자가 새로운 객체를 생성하는 몇 가지 UI가 있습니다 (새 행에 직접 매핑). 아직 행 ID가 없습니다. 내 콘텐츠 공급자를 통해 새 행을 삽입합니다. uri (minus rowid)에 대한 업데이트를 수신하는 UI 활동에 컨텐츠 관찰자가 있습니다. 따라서 UI가 삽입을 위해 보낸 새 행에 대해서만 듣기를 원한다고하더라도 기본 URI와 관련된 모든 행에 대한 모든 업데이트는 내 관찰자를 해고 할 것입니다. 내 UI가 자체 삽입을 수신 할 수없는 경우 UI와 db 간의 이러한 핸드 셰이크가 어떻게 작동해야하는지 잘 모르겠습니다. – Alex

0

API 레벨 16에서 ContentObserver는 rowId가있는 uri를 수신합니다. 그러나 그 전에는 행을 삽입하고 그 rowId만을 듣고 싶을 때 rowId를 알게되면 삽입 직후에 ContentResolver.registerContentObserver를 호출 할 수 있습니다.

+0

나는 아직도 젤리 빈을 체크인했다. URL에 rowid를 부여하지 않는다. – Jambaaz

관련 문제