java.lang.UnsupportedOperationException:这不被支持,使用MenuItemCompat.setOnActionExpandListener()

我最近从Eclipse迁移到Android Studio,这样做,我拿起了以下错误

java.lang.UnsupportedOperationException: This is not supported, use MenuItemCompat.setOnActionExpandListener() at android.support.v7.internal.view.menu.MenuItemImpl.setOnActionExpandListener(MenuItemImpl.java:740) at biz.nickbullcomputing.bevnav.MainActivity.onCreateOptionsMenu(MainActivity.java:699) at android.app.Activity.onCreatePanelMenu(Activity.java:2851) at android.support.v4.app.FragmentActivity.onCreatePanelMenu(FragmentActivity.java:277) at android.support.v7.internal.view.WindowCallbackWrapper.onCreatePanelMenu(WindowCallbackWrapper.java:84) at android.support.v7.app.AppCompatDelegateImplBase$AppCompatWindowCallbackBase.onCreatePanelMenu(AppCompatDelegateImplBase.java:273) at android.support.v7.app.AppCompatDelegateImplV7.preparePanel(AppCompatDelegateImplV7.java:1111) at android.support.v7.app.AppCompatDelegateImplV7.doInvalidatePanelMenu(AppCompatDelegateImplV7.java:1396) at android.support.v7.app.AppCompatDelegateImplV7.access$100(AppCompatDelegateImplV7.java:89) at android.support.v7.app.AppCompatDelegateImplV7$1.run(AppCompatDelegateImplV7.java:126) at android.os.Handler.handleCallback(Handler.java:739) at android.os.Handler.dispatchMessage(Handler.java:95) at android.os.Looper.loop(Looper.java:155) at android.app.ActivityThread.main(ActivityThread.java:5725) at java.lang.reflect.Method.invoke(Native Method) at java.lang.reflect.Method.invoke(Method.java:372) at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1030) at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:825) 

这个错误似乎来自我的主要活动的下面的代码片段

  searchItem = menu.findItem(R.id.action_search); searchItem.setOnActionExpandListener(new OnActionExpandListener() { @Override public boolean onMenuItemActionCollapse(MenuItem item) { townList.setVisibility(View.INVISIBLE); return true; // Return true to collapse action view } @Override public boolean onMenuItemActionExpand(MenuItem item) { townList.setVisibility(View.VISIBLE); return true; // Return true to expand action view } }); 

search的xml代码:

 <item android:id="@+id/action_search" android:icon="@drawable/ic_action_search" android:title="@string/action_search" app:showAsAction="ifRoom|collapseActionView" app:actionViewClass="android.support.v7.widget.SearchView"/> 

我的build.gradle文件的依赖关系

 dependencies { compile 'com.android.support:support-v4:22.2.1' compile 'com.android.support:appcompat-v7:22.0.0' compile 'com.google.android.gms:play-services:+' 

}

现在请记住,迁移之前,这是完美的工作,现在不是。 我不完全确定这是怎么发生的。 有任何想法吗?

Solutions Collecting From Web of "java.lang.UnsupportedOperationException:这不被支持,使用MenuItemCompat.setOnActionExpandListener()"

这个解决方法归功于K的评论。 非常感谢队友,谢谢!

 MenuItemCompat.setOnActionExpandListener(searchItem, new MenuItemCompat.OnActionExpandListener() { @Override public boolean onMenuItemActionExpand(MenuItem menuItem) { // Return true to allow the action view to expand townList.setVisibility(View.VISIBLE); return true; } @Override public boolean onMenuItemActionCollapse(MenuItem menuItem) { // When the action view is collapsed, reset the query townList.setVisibility(View.INVISIBLE); // Return true to allow the action view to collapse return true; } }); 

我认为你必须检查你的编译依赖项,因为它在setOnActionExpandListener中不推荐使用26.1.0检查你的app / build.gradle。 我遇到了同样的问题,下面的configuration帮助我。 希望这会为你工作。

这是我的build.gradleconfiguration。

 compileSdkVersion 25 buildToolsVersion "25.0.2" targetSdkVersion 25 compile 'com.android.support:support-v4:25.3.1' compile 'com.android.support:recyclerview-v7:25.3.1' compile 'com.android.support:cardview-v7:25.3.1' compile 'com.android.support:support-vector-drawable:25.3.1' compile 'com.android.support:design:25.3.1' MenuItemCompat.setOnActionExpandListener(item, new MenuItemCompat.OnActionExpandListener() { @Override public boolean onMenuItemActionExpand(MenuItem menuItem) { // Return true to allow the action view to expand return true; } @Override public boolean onMenuItemActionCollapse(MenuItem menuItem) { // When the action view is collapsed, reset the query // Return true to allow the action view to collapse return false; } });