2011-03-17 12 views
1

검색 대화 상자를 사용할 때 사용자 지정 검색 제안을 성공적으로 구현했습니다. 그러나 현재 각각의 추천 항목은 텍스트 일뿐입니다. 왼쪽에 아이콘을 추가하고 싶습니다. 하지만 문제는 로컬로 사진을 가지고 있지 않다는 것입니다. URL을 통해 액세스 할 수 있습니다. 문서 (Building a suggestion table)에서 Uri 대신 URL을 SUGGEST_COLUMN_ICON_1에서 로컬 파일로 보내는 방법을 찾을 수 없었습니다.사용자 지정 레이아웃으로 검색시 사용자 지정 제안

답변

0

기본 안드로이드 검색 기능을 사용하는 한 불가능하다는 것을 알고 있습니다. 그렇지 않으면 의견을 말하십시오.

1

이렇게 될 수는 있지만 상당히 엉뚱한 해커입니다. 앱의 내부 캐시 디렉토리에서 이미지를 제공하기 위해 ContentProvider를 만들어야합니다. 내 대답은 https://stackoverflow.com/a/15667914/473201입니다.

그러면 ContentProvider 파일이 기본 UI 스레드에서 액세스되기 때문에 거기에서 이미지를 다운로드 할 수 없습니다. 추천 검색어 ContentProvider의 query() 함수에서 모든 이미지를 다운로드해야합니다. 앱의 내부 캐시 디렉토리에 저장하면 SearchProve가 요청할 때 ContentProvider 파일을 반환 할 수 있습니다. 같은

뭔가 : 검색 컨텐트 프로에서 그런

class ImagesProvider extends ContentProvider { 
... 
// stuff from https://stackoverflow.com/a/15667914/473201 
... 
} 

:

@Override 
public Cursor query(Uri uri, String[] projection, String selection, String[] selectionArgs, String sortOrder) { 

    // create a cursor table of results 
    MatrixCursor mc = new MatrixCursor(columns); 
    for (SearchResult res : results) { 

     String filename = res.getId(); 
     ImagesProvider.downloadAndSaveFile(filename, res.getPictureUrl()); 

     mc.addRow(new Object[] { 
     res.getId(), 
     res.getName(), 
     ContentUris.withAppendedId(ImagesProvider.CONTENT_URI, filename) 
     }); 
    } 
    return mc; 
} 
+2

대단한 답변에 감사드립니다. 나는 아직 다운로드되지 않은 이미지의 자리 표시자를 반환하고 배경에서 다운로드하는 것을 제외하고는이 작업을 수행 할 수 있습니다. 제안은 차단하지 않습니다. 좋지만 이미지를 다운로드 한 후 업데이트 방법을 찾지 못했습니다. 어떤 아이디어? 'ContentResolver.notifyChange()'를 시도했지만 안드로이드의'SuggestionAdapter'가 변경 사항을 등록하지 않은 것처럼 보입니다. 그래서 알지 못합니다. – ryan

0

나는이 오래된 질문 알지만, 주제에 StackOverflow의 게시물이 드문 드문 보인다.

커스텀 레이아웃 (원하는 결과를 전체 화면으로 표시하고 카테고리별로 세분화 한 것은 꽤 맞춤형 레이아웃입니다)을 사용하고 검색 방법을 설명하는 데 많은 시간을 (~ 5 시간) 그러나 Subject의 android documentation에서 SearchWindget을 사용할 때 내 SearchActivity (정의 된 사용자 정의 레이아웃 포함)가 생성되지 않았습니다. 안드로이드 시스템이 내 Content Provider의 쿼리 메소드를 직접 호출하고 결과를 추악한 드롭 다운 목록에 표시했기 때문입니다. 나는 나의 자신의 주문 수색을 구르는 것을 끝내었다. 그리고 1 시간 걸렸다. 그래서 짧은 대답은 당신 자신의 것다.

관련 문제