如果搜索,则在方向更改时不会恢复工具栏中的搜索图标

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了如果搜索,则在方向更改时不会恢复工具栏中的搜索图标相关的知识,希望对你有一定的参考价值。

我通过选项菜单将搜索耦合到工具栏。单击该图标时,将展开搜索视图,隐藏显示屏上的当前视图(View.GONE),并显示搜索的RecyclerView(View.VISIBLE)。我开始在搜索栏中输入,并正确过滤了RecyclerView中的元素。现在我旋转屏幕。我保存了我正在搜索的标志searchActive和搜索栏中的当前文本。在还原时,我执行以下操作来恢复状态:

@Override
public boolean onPrepareOptionsMenu (Menu menu)
{
    Log.i(TAG, "CPA: onPrepareOptionsMenu called");
    if(searchActive)
    {
        searchMenuItem.expandActionView();
        searchView.setQuery(saved_search_text, true);
    }
    return true;
}

它工作正常。 RecyclerView将恢复,显示正确筛选的列表。但是,当我点击某些内容时,我会得到我想要的项目,使用以下内容折叠搜索栏:

        toolbar.setTitle(CpaPatient.currentPatient.getGivenName());
        toolbar.collapseActionView();

工具栏已恢复,并且RecyclerView隐藏为应该发生但是搜索图标丢失,我无法进行其他搜索。我需要再做一次屏幕旋转来恢复它。然后我可以做一个搜索。在恢复图标缺失的哪一步我错过了什么?我相信它必须与用户操作相关联,点击搜索图标,我不知道如何模拟,但我不确定。有任何想法吗?其他人有这个问题吗?

答案

我找到了一个我不喜欢的解决方案。如果有人能找到一个更好的我喜欢它。显然,在onPrepareOptionsMenu()中恢复搜索状态仍然为时过早,尽管这是我在恢复时从活动中获得的最后一个回调。所以我所做的是增加延迟

@Override
public boolean onPrepareOptionsMenu (Menu menu)
{
    Log.i(TAG, "CPA: onPrepareOptionsMenu called");
    if(searchActive)
    {
        new Handler().postDelayed(new Runnable()
        {
            @Override
            public void run()
            {
                searchMenuItem.expandActionView();
                searchView.setQuery(saved_search_text, true);
            }

        }, 200);
    }
    return true;
}

我想在编程扩展搜索栏之前200毫秒等待填充其内容允许在模拟用户点击完成之前完全恢复工具栏。

我认为这是一个可悲的解决方案。理想情况下,我应该从系统中获得一些指示,因为它可以完全运行并可以调用此类操作。

以上是关于如果搜索,则在方向更改时不会恢复工具栏中的搜索图标的主要内容,如果未能解决你的问题,请参考以下文章

UISearchBar 不会更改 iOS 12.1 的搜索图标和占位符颜色

我如何更改搜索视图图标的颜色?

桌面图标名称怎么都一样,怎么恢复?如图......

怎么修改百度地图搜索出来的地址的图标的样式啊,是搜索出来后的图标啊

用户开始输入时更改搜索器图标

更改 SearchView 上的工具栏颜色/样式单击