2011-03-17 123 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个小时,所以简短的答案是,自己推出。