操作栏Sherlock SearchView没有扩展点击它

我有一个Sherlock片段活动,我使用片段寻呼机适配器设置不同的sherlock片段。

现在显示每个片段中的searchview我已经把这个方法放在onCreate的片段::

该方法将在片段的ActionBar中显示菜单项。

@Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setHasOptionsMenu(true); } 

我现在也设置了onCreateOptionMenu()像这样::

 @Override public void onCreateOptionsMenu(Menu menu, MenuInflater inflater) { super.onCreateOptionsMenu(menu, inflater); inflater.inflate(R.menu.menu, menu); final MenuItem searchItem = menu.findItem(R.id.menu_item_search); final SearchView searchView = (SearchView) searchItem.getActionView(); searchView.setQueryHint("Search Here"); } 

现在奇怪的事情发生在我的第一个片段我做了同样的事情,并成功打开searchview。

如果

  • 我去第一个片段,打开searchview,然后去第二个
  • 片段searchview将被打开。

同样的事情发生在第三个片段

  • 去第三个片段,
  • 打开searchview,
  • 回到第二个分支,searchview被打开。

但是,如果我直接去第二个片段searchview不被打开。

希望我清楚。

有关这个的任何线索? 任何build议/链接将不胜感激..

提前致谢…

编辑::

menu.xml文件

 <?xml version="1.0" encoding="utf-8"?> <menu xmlns:android="http://schemas.android.com/apk/res/android"> <item android:id="@+id/menu_item_search" android:icon="@drawable/abs__ic_search" android:showAsAction="ifRoom|collapseActionView" android:actionViewClass="com.actionbarsherlock.widget.SearchView" android:title="Search Products"> </item> <item android:id="@+id/root_menu" android:icon="@drawable/abs__ic_menu_moreoverflow_normal_holo_light" android:showAsAction="always" android:title="More"> <menu> <item android:id="@+id/menu_Home" android:icon="@drawable/home" android:showAsAction="never" android:title="Home"/> <item android:id="@+id/menu_favourite" android:icon="@drawable/favourite" android:showAsAction="never" android:title="Favourite"/> <item android:id="@+id/menu_Balance" android:icon="@drawable/balance" android:showAsAction="never" android:title="Balance"/> <item android:id="@+id/menu_logout" android:icon="@drawable/btn_logout" android:showAsAction="never" android:title="Logout"/> </menu> </item> </menu> 

Logcat ::

  12-06 16:45:26.401: E/AndroidRuntime(1581): FATAL EXCEPTION: main 12-06 16:45:26.401: E/AndroidRuntime(1581): java.lang.ClassCastException: com.mobifin.subscriber.ButtonPayActivity 12-06 16:45:26.401: E/AndroidRuntime(1581): at com.mobifin.subscriber.home.BillPayFragment.onCreateOptionsMenu(BillPayFragment.java:101) 12-06 16:45:26.401: E/AndroidRuntime(1581): at android.support.v4.app.Watson.onCreatePanelMenu(Watson.java:55) 12-06 16:45:26.401: E/AndroidRuntime(1581): at com.actionbarsherlock.ActionBarSherlock.callbackCreateOptionsMenu(ActionBarSherlock.java:560) 12-06 16:45:26.401: E/AndroidRuntime(1581): at com.actionbarsherlock.internal.ActionBarSherlockCompat.preparePanel(ActionBarSherlockCompat.java:466) 12-06 16:45:26.401: E/AndroidRuntime(1581): at com.actionbarsherlock.internal.ActionBarSherlockCompat.dispatchInvalidateOptionsMenu(ActionBarSherlockCompat.java:265) 12-06 16:45:26.401: E/AndroidRuntime(1581): at com.actionbarsherlock.app.SherlockFragmentActivity.invalidateOptionsMenu(SherlockFragmentActivity.java:149) 12-06 16:45:26.401: E/AndroidRuntime(1581): at com.actionbarsherlock.app.SherlockFragmentActivity.supportInvalidateOptionsMenu(SherlockFragmentActivity.java:155) 12-06 16:45:26.401: E/AndroidRuntime(1581): at android.support.v4.app.Fragment.setMenuVisibility(Fragment.java:726) 12-06 16:45:26.401: E/AndroidRuntime(1581): at android.support.v4.app.FragmentPagerAdapter.setPrimaryItem(FragmentPagerAdapter.java:127) 12-06 16:45:26.401: E/AndroidRuntime(1581): at android.support.v4.view.ViewPager.populate(ViewPager.java:802) 12-06 16:45:26.401: E/AndroidRuntime(1581): at android.support.v4.view.ViewPager.completeScroll(ViewPager.java:1280) 12-06 16:45:26.401: E/AndroidRuntime(1581): at android.support.v4.view.ViewPager.computeScroll(ViewPager.java:1176) 12-06 16:45:26.401: E/AndroidRuntime(1581): at android.view.ViewGroup.drawChild(ViewGroup.java:1562) 12-06 16:45:26.401: E/AndroidRuntime(1581): at android.view.ViewGroup.dispatchDraw(ViewGroup.java:1373) 12-06 16:45:26.401: E/AndroidRuntime(1581): at android.view.View.draw(View.java:6883) 12-06 16:45:26.401: E/AndroidRuntime(1581): at android.view.ViewGroup.drawChild(ViewGroup.java:1646) 12-06 16:45:26.401: E/AndroidRuntime(1581): at android.view.ViewGroup.dispatchDraw(ViewGroup.java:1373) 12-06 16:45:26.401: E/AndroidRuntime(1581): at android.view.ViewGroup.drawChild(ViewGroup.java:1644) 12-06 16:45:26.401: E/AndroidRuntime(1581): at android.view.ViewGroup.dispatchDraw(ViewGroup.java:1373) 12-06 16:45:26.401: E/AndroidRuntime(1581): at android.view.ViewGroup.drawChild(ViewGroup.java:1644) 12-06 16:45:26.401: E/AndroidRuntime(1581): at android.view.ViewGroup.dispatchDraw(ViewGroup.java:1373) 12-06 16:45:26.401: E/AndroidRuntime(1581): at android.view.ViewGroup.drawChild(ViewGroup.java:1644) 12-06 16:45:26.401: E/AndroidRuntime(1581): at android.view.ViewGroup.dispatchDraw(ViewGroup.java:1373) 12-06 16:45:26.401: E/AndroidRuntime(1581): at android.view.View.draw(View.java:6883) 12-06 16:45:26.401: E/AndroidRuntime(1581): at android.widget.FrameLayout.draw(FrameLayout.java:357) 12-06 16:45:26.401: E/AndroidRuntime(1581): at com.android.internal.policy.impl.PhoneWindow$DecorView.draw(PhoneWindow.java:1862) 12-06 16:45:26.401: E/AndroidRuntime(1581): at android.view.ViewRoot.draw(ViewRoot.java:1522) 12-06 16:45:26.401: E/AndroidRuntime(1581): at android.view.ViewRoot.performTraversals(ViewRoot.java:1258) 12-06 16:45:26.401: E/AndroidRuntime(1581): at android.view.ViewRoot.handleMessage(ViewRoot.java:1859) 12-06 16:45:26.401: E/AndroidRuntime(1581): at android.os.Handler.dispatchMessage(Handler.java:99) 12-06 16:45:26.401: E/AndroidRuntime(1581): at android.os.Looper.loop(Looper.java:130) 12-06 16:45:26.401: E/AndroidRuntime(1581): at android.app.ActivityThread.main(ActivityThread.java:3683) 12-06 16:45:26.401: E/AndroidRuntime(1581): at java.lang.reflect.Method.invokeNative(Native Method) 12-06 16:45:26.401: E/AndroidRuntime(1581): at java.lang.reflect.Method.invoke(Method.java:507) 12-06 16:45:26.401: E/AndroidRuntime(1581): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:839) 12-06 16:45:26.401: E/AndroidRuntime(1581): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:597) 12-06 16:45:26.401: E/AndroidRuntime(1581): at dalvik.system.NativeStart.main(Native Method) 

Solutions Collecting From Web of "操作栏Sherlock SearchView没有扩展点击它"

我们通常使用onCreateOptionsMenu()来创build片段和活动的选项菜单。 如果你通过文档,还有另一个名为onPrepareOptionsMenu()帮助程序方法,根据文档说:

准备显示屏幕的标准选项菜单。 在菜单显示之前,每次显示时调用它。 您可以使用此方法高效地启用/禁用项目或以其他方式dynamic修改内容。

SearchView /折叠工作正常,当我们没有实例化ViewPager内的ViewPager或任何类似的标签切换场景。 我曾经有过同样的问题。 我想出了使用onPrepareOptionsMenu()来解决我的问题。

只要在你的每个片段和里面实现onPrepareOptionsMenu() ,调用onQueryTextChange("")传递""作为查询string。 它会做的伎俩,build议片段容器的活动,这个片段要介意自己的search业务。

或者,不确定,但对容器活动的invalidateOptionsMenu()调用也可以派上用场。

让我知道如果有帮助。

编辑:

我的实施:

 @Override public void onCreateOptionsMenu(Menu menu, MenuInflater inflater) { super.onCreateOptionsMenu(menu, inflater); SearchView searchView = new SearchView(getActivity()); searchView.setQueryHint("Search for Events"); searchView.setOnQueryTextListener(this); menu.add(0, ACTION_SEARCH, 0, "Search") .setIcon(R.drawable.ic_mailbox_search) .setActionView(searchView) .setOnActionExpandListener(menuExpandListener) .setShowAsAction( MenuItem.SHOW_AS_ACTION_IF_ROOM | MenuItem.SHOW_AS_ACTION_COLLAPSE_ACTION_VIEW); } @Override public void onPrepareOptionsMenu(Menu menu) { super.onPrepareOptionsMenu(menu); onQueryTextChange(""); } @Override public boolean onQueryTextSubmit(String query) { return true; } @Override public boolean onQueryTextChange(String newText) { if (mAdapter != null) mAdapter.getFilter().filter(newText); return false; } 

我已经达到了我想要的最终,但有一个问题..我不知道我所做的是黑客/补丁或正确的方式,但它工作正常<3.0,但现在find问题在> = 3.0。

我所做的是::

在我的容器活动我已经声明onCreateOptionsMenu()和onPrepareOptionsMenu()::

 @Override public boolean onCreateOptionsMenu(Menu menu) { super.onCreateOptionsMenu(menu); getSupportMenuInflater().inflate(R.menu.menu, menu); return true; } public boolean onPrepareOptionsMenu(Menu menu) { if(versionStatus==0) { menu.findItem(R.id.root_menu).setVisible(false); } return super.onPrepareOptionsMenu(menu); } 

现在在每个片段的onCreateOptionsMenu()我做了这样的事情::
我已经检查了构build版本的操作系统,并基于我manupulate我的选项菜单像下面..

 @Override public void onCreateOptionsMenu(Menu menu, MenuInflater inflater) { super.onCreateOptionsMenu(menu, inflater); int currentapiVersion = android.os.Build.VERSION.SDK_INT; int versionStatus = 0; if (currentapiVersion == android.os.Build.VERSION_CODES.FROYO || currentapiVersion == android.os.Build.VERSION_CODES.GINGERBREAD) { versionStatus=0; } else if(currentapiVersion >= android.os.Build.VERSION_CODES.HONEYCOMB) { versionStatus=1; } if(versionStatus==1) { inflater.inflate(R.menu.menu, menu); menu.findItem(R.id.menu_item_search).setVisible(false); final MenuItem searchItem = menu.findItem(R.id.menu_item_search); SearchView searchView = (SearchView) searchItem.getActionView(); searchView.setQueryHint("Search Products"); searchView.setIconifiedByDefault(false); searchView.setOnQueryTextListener(this); } else { inflater.inflate(R.menu.menu, menu); final MenuItem searchItem = menu.findItem(R.id.menu_item_search); SearchView searchView = (SearchView) searchItem.getActionView(); searchView.setQueryHint("Search Products"); searchView.setIconifiedByDefault(false); searchView.setOnQueryTextListener(this); } } 

在2.3.3中工作正常,但是现在面临的问题是3.0+

1)展开searchview后无法看到提示
2)扩大searchview在第一个片段… 在这里输入图像说明

3)移动到第二个片段(不折叠searchview) 在这里输入图像说明

4)现在在第二个片段展开当前片段的search视图 在这里输入图像说明

5)在当前片段按下然后结果是混乱:(

在这里输入图像说明

编辑::

我已经做了我的容器活动中的以下更改,现在它的工作正常,最后我已经实现了我想要的….

  @Override public boolean onCreateOptionsMenu(Menu menu) { super.onCreateOptionsMenu(menu); if(versionStatus==0) { getSupportMenuInflater().inflate(R.menu.menu, menu); } return true; } public boolean onPrepareOptionsMenu(Menu menu) { if(versionStatus==0) { menu.findItem(R.id.root_menu).setVisible(false); } return super.onPrepareOptionsMenu(menu); }