【问题标题】:Leanback Search fragment closing after gaining focus on resultsLeanback Search 片段在关注结果后关闭
【发布时间】:2018-06-06 15:17:28
【问题描述】:

在leanback 搜索片段中,当我们使用键盘提交搜索并且我们有搜索结果时,当使用返回按钮提交搜索查询时,该片段正在关闭。我们可以看到,在返回按钮向下操作时,结果获得焦点并且键盘正在隐藏(如预期的那样),但在向上操作时屏幕正在关闭。

我认为这是leanback 框架中的一个错误,因为它正在leanback 展示中重现。

我还发布了一个问题https://github.com/googlesamples/leanback-showcase/issues/58

是否有禁用关闭屏幕的解决方法?

【问题讨论】:

  • 我也遇到了和你一样的问题。你找到解决办法了吗?
  • 还没有,但我很快就会回到任务中,所以我会找到一个。一个可能的肮脏解决方案可能是在结果获得焦点后禁用活动 onBackPressed 几毫秒。但是,如果您按住返回按钮,这将无法解决问题。

标签: android leanback


【解决方案1】:

我找到了错误的来源。 在 SearchSupportFragment 中有一个 searchBarListener 将焦点放在 onKeyboardDismiss 中的结果上,但这是在 dispatchKeyEvent 之前调用的,当处理后退按钮时,结果已经聚焦并且屏幕正在关闭。

在 Leanback 团队修复它之前,我已经找到了一个 hacky 解决方案。在 onViewCreated 中,我设置了自己的 searchBarListener,并且延迟了焦点更改

    override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
    super.onViewCreated(view, savedInstanceState)

    //this is overriding the default searchResultProvider, because of a bug in it
    view.findViewById<SearchBar>(R.id.lb_search_bar).setSearchBarListener(object : SearchBar.SearchBarListener {
        override fun onSearchQueryChange(query: String?) {
            onQueryTextChange(query)
        }

        override fun onSearchQuerySubmit(query: String?) {
            onQueryTextSubmit(query)
        }

        override fun onKeyboardDismiss(query: String?) {
            searchHandler.postDelayed({ focusOnResults() }, 200)
        }
    })
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-01-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-07-29
    相关资源
    最近更新 更多