有没有好的方法来处理这个?还是我真的必须手动跟踪打开的搜索视图和活动操作模式?
目前,我在我的基本活动中实现了它......但这总是需要一些短代码块来注册一个活动的动作模式或一个可见的搜索视图......它工作得很好,但我认为,可能有一个更好的解决方案...
有没有更好的办法?
顺便说一句,我正在使用 AppCompat ......以前,这些都不需要特殊处理......
public abstract class BaseActivity
{
// ----------------
// manually register opened search view
// or active action mode
// ----------------
public void registerActiveActionMode(ActionMode mode)
{
mActiveActionMode = mode;
}
public void registerCollapsableMenuItem(MenuItem menuItem)
{
mCollapsableMenuItem = menuItem;
}
// ------------------
// delegate backpress...
// ------------------
protected boolean checkBackPressConsumed()
{
if (closeDrawer())
return true;
if (closeActionMode())
return true;
if (closeCollapsableMenuItem())
return true;
return false;
}
// ------------------------
// back press handler with delegation, if necessary...
// ------------------------
@Override
public void onBackPressed()
{
if (checkBackPressConsumed())
return;
super.onBackPressed();
}
// -------------------------
// helper functions
// -------------------------
public boolean closeDrawer()
{
if (mNavigationDrawerFragment != null)
{
if (isDrawerOpen())
{
mNavigationDrawerFragment.closeDrawer();
return true;
}
}
return false;
}
public boolean closeActionMode()
{
if (mActiveActionMode != null)
{
mActiveActionMode.finish();
mActiveActionMode = null;
return true;
}
return false;
}
public boolean closeCollapsableMenuItem()
{
if (mCollapsableMenuItem != null)
{
MenuItemCompat.collapseActionView(mCollapsableMenuItem);
mCollapsableMenuItem = null;
return true;
}
return false;
}
}