几次尝试在#android-dev(irc)中提出这个问题并进行了数小时的搜索,但我仍然没有解决这个问题的方法。
我目前正在研究我的 android 音乐播放器中的搜索功能。我正在使用令人惊叹的 ActionBarSherlock 为较旧的 android 版本提供支持。
我的问题如下:当用户点击搜索菜单/动作按钮时,点击动作的actionView应该被展开,并且应该显示一个新的片段(searchFragment)而不是当前活动的片段。但是,当我尝试这样做时,actionView 不会扩展。
我尝试在不添加 SearchFragment 的情况下扩展 actionView,在这种情况下,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(...) 方法将当前显示的片段替换为第一个参数中的片段。此外,片段被添加到自定义 backStack。在扩展视图之前或之后替换片段没有任何区别。
希望有人能够帮助我:)提前谢谢!