在#android-dev(irc)和数小时的搜索中,有几次尝试问这个问题,但是我仍然没有解决这个问题的方法。
我目前正在使用Android音乐播放器中的搜索功能。我正在使用惊人的ActionBarSherlock为较旧的android版本提供支持。
我的问题如下:
当用户单击搜索菜单/动作按钮时,应展开所单击动作的actionView,并应显示一个新的Fragment(searchFragment),而不是当前处于活动状态的Fragment。
但是,当我尝试执行此操作时,actionView不会扩展。
我尝试扩展actionView,而不添加SearchFragment,在这种情况下,actionView确实扩展了。但是,合并似乎是不可能的。
这是我的代码:
@Override
public boolean onOptionsItemSelected(MenuItem item) {
if (item != null) {
if (item.getItemId() == R.id.collectionactivity_search_menu_button) {
item.expandActionView();
mTabsAdapter.replace(new SearchFragment(), false);
return true;
}
}
return false;
}
/**
* Replaces the view pager fragment at specified position.
*/
public void replace(int position, Fragment newFragment, boolean isBackAction) {
// Get currently active fragment.
ArrayList<Fragment> fragmentsStack = mFragments.get(position);
Fragment currentFragment = fragmentsStack.get(fragmentsStack.size() - 1);
if (currentFragment == null) {
return;
}
// Replace the fragment using a transaction.
this.startUpdate(mViewPager);
FragmentTransaction ft = mFragmentManager.beginTransaction();
ft.setTransition(FragmentTransaction.TRANSIT_FRAGMENT_FADE);
ft.attach(newFragment).remove(currentFragment).commit();
if (isBackAction == true)
fragmentsStack.remove(currentFragment);
else
fragmentsStack.add(newFragment);
this.notifyDataSetChanged();
this.finishUpdate(mViewPager);
}
mTabsAdapter.replace(...)方法将当前显示的Fragment替换为第一个参数中的Fragment。另外,该片段被添加到自定义backStack中。
在扩展视图之前或之后替换片段没有任何区别。
希望有人能够帮助我:)
提前致谢!
最佳答案
您是否尝试过将actionviews android:showAsAction设置为crashActionView?这样,您就不必管理展开/关闭操作。
如果那不起作用,则可以用另一种方式处理它,设置扩展侦听器,并在操作视图开始扩展后替换片段
item.setOnActionExpandListener(new OnActionExpandListener() {
@Override
public boolean onMenuItemActionCollapse(MenuItem item) {
// Do something when collapsed
return true; // Return true to collapse action view
}
@Override
public boolean onMenuItemActionExpand(MenuItem item) {
mTabsAdapter.replace(new SearchFragment(), false);
return true; // Return true to expand action view
}
});
记得返回true以使actionview扩展