【问题标题】:Search suggestions with custom listview like Google Search app使用自定义列表视图搜索建议,例如 Google 搜索应用
【发布时间】:2013-07-30 17:33:15
【问题描述】:

我希望我最近的搜索建议 [使用操作栏 Sherlock SearchView] 显示在自定义列表视图中。默认的左侧有一个计时器/时钟图标,右侧有最近的查询(文本)。

我想做一些类似 Google 搜索应用程序的事情,here's a screenshot

单击右侧的箭头时,仅搜索字段填充查询并且不执行搜索操作。单击列表视图中的项目(文本)时,将调用搜索意图。

我已经实现了搜索和建议,只是想为建议创建一个自定义列表视图。

有人可以帮我吗?

谢谢!

【问题讨论】:

  • 嗨@droidster,我正在处理类似的问题。你有没有想过如何自定义列表视图以获取建议?
  • 否 @SherCoder 无法找到解决方案。建议显示为正常列表。没有填充搜索字段的箭头,选择项目开始搜索。

标签: android android-custom-view searchview


【解决方案1】:

您将不得不制作一个自定义列表适配器。

在此处查看如何制作。 https://stackoverflow.com/a/8166802/661074

然后,在您的适配器中,您将拥有一个 onClick() 侦听器,用于“右箭头”。在监听器中,我会触发一个通知活动的事件。

这是一个非常好的事件消息库。 https://github.com/greenrobot/EventBus

然后,您的活动将收到包含有关单击项目的数据的消息。使用该数据填充您的搜索字段。

【讨论】:

  • 嘿@Kent,谢谢你的回答。但是如何链接 Suggestions Provider 和自定义列表视图?
  • 如果您尝试根据自定义数据集创建该列表,例如数据库中的某个列表,那么您必须将该数据传递给自定义列表构造函数。然后使用 TextWatcher 过滤数据
  • 如果您只是想让它完成用户可能正在输入的任何内容,那么我会使用 AutoCompleteTextView
  • 你好@Kent,我正在使用 SearchRecentSuggestionsProvider。有没有一种简单的方法来自定义布局?数据在内容提供者中。另外,我正在使用 ABS 4.3 SearchView。很抱歉,我无法理解 AutoCompleteTextView 如何在这里工作。能详细点吗?
  • 我从未真正使用过 SearchRecentSuggestionsProvider。但从几个谷歌搜索来看,在我看来你可以使用这个:developer.android.com/guide/topics/search/…我会阅读“操作键”部分。看来这就是你想要做的。
【解决方案2】:

我知道现在已经很晚了,但我发布了这个,以便将来可能对某人有所帮助。您实际上可以只用一行启用建议右侧的箭头。 这称为查询细化。启用查询优化将显示箭头,单击该箭头将重写您的查询文本,然后您可以对其进行编辑并稍后提交。这是我项目中的一个示例。

searchView.apply {
            setSearchableInfo(searchManager.getSearchableInfo(componentName))
            isQueryRefinementEnabled = true
        }

这里的重要部分是 isQueryRefinementEnabled = true

【讨论】:

    【解决方案3】:

    可能会帮助某人,这正是问题所要求的。 http://www.shmoula.cz/howto-access-recent-query-suggestions-on-android-and-populate-listview-with-them/

    主要思想是查询 SearchRecentSuggestionsProvider 并填充列表。我们可以这样做,

    ContentResolver contentResolver = getApplicationContext().getContentResolver();
    
    String contentUri = "content://" + MySuggestionProvider.AUTHORITY + '/' + SearchManager.SUGGEST_URI_PATH_QUERY;
    Uri uri = Uri.parse(uriStr);
    
    Cursor cursor = contentResolver.query(uri, null, null, new String[] { query }, null);
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-05-19
      • 1970-01-01
      相关资源
      最近更新 更多