如果搜索,工具栏中的搜索图标不会在方向更改时恢复
Search icon in Toolbar is not restored on orientation change if searching
我通过选项菜单将搜索耦合到工具栏。当我单击该图标时,搜索视图会展开,显示屏上的当前视图会隐藏 (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() 中恢复搜索状态还为时过早,尽管这是我从 Activity 恢复时得到的最后一个回调。所以我所做的是添加延迟
@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 毫秒可以让工具栏在我的模拟用户点击完成之前完全恢复。
我认为这是一个可悲的解决方案。理想情况下,我应该从系统得到一些指示,因为它何时可以完全运行并可以调用此类操作。
我通过选项菜单将搜索耦合到工具栏。当我单击该图标时,搜索视图会展开,显示屏上的当前视图会隐藏 (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() 中恢复搜索状态还为时过早,尽管这是我从 Activity 恢复时得到的最后一个回调。所以我所做的是添加延迟
@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 毫秒可以让工具栏在我的模拟用户点击完成之前完全恢复。
我认为这是一个可悲的解决方案。理想情况下,我应该从系统得到一些指示,因为它何时可以完全运行并可以调用此类操作。