2011-03-17 119 views
1

使用搜索對話框時,我已成功實現了自定義搜索建議。但是目前每個建議項目都只是文本。我想在左邊添加一個圖標。但問題是,我沒有這些圖片在本地,而是我可以通過URL訪問它們。我一直無法在文檔(Building a suggestion table)中找到如何將URL而不是Uri發送到SUGGEST_COLUMN_ICON_1下的本地文件。使用自定義佈局搜索時的自定義建議

回答

0

我發現這是不可能的,只要你想使用默認的Android搜索功能即可。如果您不知道,請評論。

1

所以這是可能的,但它是一個相當愚蠢和有點hacky。您必須創建一個ContentProvider來提供應用程序內部緩存目錄中的圖像(請參閱我的答案https://stackoverflow.com/a/15667914/473201)。

然後,由於您的文件ContentProvider將在主UI線程上訪問,因此無法在該處下載圖像。您必須下載搜索建議ContentProvider的query()函數中的所有圖像。如果將它們放入應用程序的內部緩存目錄中,ContentProvider文件可以在SearchView要求時返回它們。

喜歡的東西:

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

然後在您的ContentProvider搜索:

@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()',但它看起來像Android的'SuggestionAdapter'不會註冊更改,所以它沒有注意到。 – ryan 2013-11-05 01:47:02

0

我知道這是一個老問題,但在話題的StackOverflow職位顯得稀疏。

我花費了大量的時間(〜5小時)試圖使用自定義佈局進行搜索(想要的結果是全屏並按類別分段,這是相當自定義的佈局),並使用描述的方法在關於主題的android documentation中,但是當使用SearchWidget時,我的SearchActivity(使用其定義的自定義佈局)從未被創建,因爲Android系統直接調用了我的內容提供者的查詢方法並將結果呈現在一個醜陋的下拉列表中。我結束了自己的定製搜索,花了大約1個小時,所以簡短的答案是,自己推出。