有几次尝试在#android-dev(irc)和搜索时间中提出这个问题,但我仍然没有解决这个问题的方法。
我正在研究我的Android音乐播放器中的搜索功能。我正在使用惊人的ActionBarSherlock来为旧的Android版本提供支持。
我的问题如下: 当用户单击搜索菜单/操作按钮时,应该展开所单击操作的actionView,并且应显示新的片段(searchFragment)而不是当前活动的片段。 但是,当我尝试这样做时,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替换为第一个参数中的一个。另外,该片段正被添加到自定义backStack中。 在展开View之前或之后替换Fragment没有任何区别。
希望有人能帮助我:) 提前谢谢!
答案 0 :(得分:2)
您是否尝试将您的操作视图android:showAsAction设置为collapseActionView?这样您就不必管理展开/关闭操作。 如果这不起作用,你可以用另一种方式处理它,你设置一个展开监听器并在你的动作视图开始扩展后替换你的片段
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展开
答案 1 :(得分:1)
我发现问题是由什么引起的。
我的mTabsAdapter.replace(..)方法正在调用notifyDataSetChanged();.因此,每当我更换片段时,都会调用onPrepareOptionsMenu,导致搜索操作按钮被删除并再次添加,从而导致actionView被折叠。
解决这个问题的方法是修复我的onPrepareOptionsMenu,这样只要调用onPrepareOptionsMenu并且之前展开了actionView,actionView就会再次展开。