#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に追加されます。ビューを展開する前または後にフラグメントを置き換えても、違いはありませんでした。
誰かが私を助けてくれることを願っています:)事前に感謝します!