在#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扩展

10-08 16:15