You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Google Places:搜索无结果时如何捕获输入的查询文本?

实现搜索无结果时捕获用户输入文本的方案

当然可以实现!我之前做项目时刚好碰到过同样的需求,给你分享两个实用的方案:

方案一:结合OnQueryTextListener与结果回调缓存文本

这个思路是先实时缓存用户的输入内容,再通过Autocomplete的错误回调判断是否无结果,进而使用缓存的文本:

  1. 给AutocompleteSupportFragment设置文本监听,缓存用户输入:
// 先定义一个变量缓存用户输入
private var userCurrentQuery: String? = null

autocompleteSupportFragment.setOnQueryTextListener(object : SearchView.OnQueryTextListener {
    override fun onQueryTextSubmit(query: String?): Boolean {
        // 提交时缓存文本
        userCurrentQuery = query ?: ""
        return false // 返回false让Autocomplete组件继续处理提交逻辑
    }

    override fun onQueryTextChange(newText: String?): Boolean {
        // 实时更新缓存的输入文本
        userCurrentQuery = newText ?: ""
        return false
    }
})
  1. 监听Autocomplete的结果回调,在无结果时获取缓存文本:
autocompleteSupportFragment.setOnPlaceSelectedListener(object : PlaceSelectionListener {
    override fun onPlaceSelected(place: Place) {
        // 处理有搜索结果的逻辑,比如跳转详情页等
    }

    override fun onError(status: Status) {
        // 判断是否为无结果的错误状态
        if (status.statusCode == PlacesStatusCodes.STATUS_ZERO_RESULTS) {
            userCurrentQuery?.let { inputText ->
                // 这里就可以使用用户输入的无结果文本了
                Log.d("NoSearchResults", "用户输入的内容:$inputText")
                // 比如执行自定义逻辑:保存输入、提示用户等
            }
        } else {
            // 处理其他错误情况,比如网络问题、权限不足等
        }
    }
})

方案二:直接获取组件内的输入框文本

如果不想缓存文本,也可以在无结果回调时直接从AutocompleteSupportFragment的输入控件中获取内容,注意要确保Fragment视图已加载完成:

autocompleteSupportFragment.setOnPlaceSelectedListener(object : PlaceSelectionListener {
    override fun onPlaceSelected(place: Place) {
        // 处理有结果的情况
    }

    override fun onError(status: Status) {
        if (status.statusCode == PlacesStatusCodes.STATUS_ZERO_RESULTS) {
            // 获取Autocomplete内部的SearchView控件
            val searchView = autocompleteSupportFragment.view?.findViewById<SearchView>(R.id.places_autocomplete_search_input)
            val inputText = searchView?.query.toString()
            
            if (inputText.isNotEmpty()) {
                // 处理用户输入的文本
                Log.d("NoSearchResults", "用户输入:$inputText")
            }
        }
    }
})

注意事项

  • 确保你已经正确配置了Places SDK的权限与API密钥,避免因配置问题导致的错误干扰判断;
  • PlacesStatusCodes.STATUS_ZERO_RESULTS是官方定义的无结果状态码,直接判断这个值就能准确捕获无结果场景。

内容的提问来源于stack exchange,提问作者user1209216

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.14 06:48:33