2010-07-14 7 views
3

일부 데이터베이스 항목을 반복하는 사용자 지정 어댑터를 구현하고 있습니다.이 어댑터는 차례로 Android 연락처 데이터베이스에 다시 연결됩니다. 어댑터는 내용 분석기에 대한 조회를 작성하고 리턴 된 커서의 데이터를보기에 바인드합니다. 그러나 개인 데이터베이스에 연락처를 추가 한 다음 Android 연락처 목록에서 해당 연락처를 제거한다고 가정합니다. 쿼리가 실패하고 이상적인 경우 데이터베이스에서 해당 항목을 삭제하고 다음 항목을 시도하고 바인딩 할 것으로 예상되는 뷰를 무효화하여 화면에 나타나지 않게하는 것이 이상적입니다.어댑터에 대해 bindView()를 구현할 때보기를 건너 뛸 수 있습니까?

SDK 문서에서 그렇게하는 확실한 방법이 보이지 않으므로 게으른 웹에 물어볼 것입니다.

다른 해결책은 인스턴스 생성시 전체 개인 연락처 데이터베이스를 반복하고 모든 잘못된 항목을 제거하는 것이지만 매우 비싸다고 생각합니다.

+0

"잘못된 연락처"를 필터링하려면 커서를 "쿼리"할 수 없습니까? – st0le

+0

나는 미리 할 수 ​​있지만, 말했듯이, 내 앱이 실행되는 동안 사용자가 Contacts 앱으로 전환하고, 연락처를 삭제하고, 내 앱으로 돌아가서 연락처 목록을로드 할 수있는 조건이 있습니다. 즉, 뷰를 렌더링 할 때마다 목록의 모든 연락처에 대해 사전 검색을 수행해야합니다. 그런 다음 ArrayAdapter를 사용할 수 있습니다. 하지만 가능한 경우 커서 어댑터를 사용하는 것이 좋습니다. –

답변

4

이 경우보기를 무효화 할 수 없으므로보기 세트를 보이지 않는 것으로 되돌려 보내야합니다. 반환보기

view.setVisibility(View.GONE); 
1

사용자가 응용 프로그램이 일시 중지됩니다 연락처 목록 응용 프로그램으로 전환하는 경우에

사용이. 커서 어댑터를 사용하면 어댑터가 커서를 비활성화하고 자동 requery에 true를 제공하면 커서가 응용 프로그램으로 돌아 가면 커서가 새로 고쳐집니다.

항목을 가져 오는 데 사용하는 SQL 문에서 목록에 표시하지 않으려는 모든 항목을 제거 할 수 있습니까? 그러면 청소가 거의 자동으로 이루어집니다.

+0

답을 고맙게 생각하지만 성능 문제에 대해서는 펜티엄 10의 해결책을 생각해 봅니다. Auto requery로이 작업을 수행 할 수 없다는 이유는 cursoradapter가 (Android 연락처 목록에있는) 연락처 ID의 데이터베이스를위한 것이기 때문입니다. 커서 어댑터에서 bindView를 실행할 때마다 해당 연락처로 실제로 후속 쿼리를 작성합니다 ID를 Android 연락처 목록에 추가합니다. 그래서 나는 비싸다 모든 죽은 참조를 확인하고 제거하기 위해 재 쿼리에 커서를 전처리해야 할 것이다. –

관련 문제