2017-11-23 5 views
0

私はこれを使用してSearchViewを実装しています。MenuItemCompat.setOnActionExpandListenerのUnsupportedOperationException

活動をロードするとき、私はすぐに次のエラー見ています:それは私が使用しているAndroidのAPIに関係している場合

11-22 20:55:21.013 10008-10008/com.troychuinard.fanpolls E/AndroidRuntime: FATAL EXCEPTION: main 
                     Process: com.troychuinard.fanpolls, PID: 10008 
                     java.lang.UnsupportedOperationException: This is not supported, use MenuItemCompat.setOnActionExpandListener() 
                      at android.support.v7.view.menu.MenuItemImpl.setOnActionExpandListener(MenuItemImpl.java:743) 
                      at android.support.v4.view.MenuItemCompat.setOnActionExpandListener(MenuItemCompat.java:464) 
                      at com.troychuinard.fanpolls.NewImageActivity.onCreateOptionsMenu(NewImageActivity.java:86) 
                      at android.app.Activity.onCreatePanelMenu(Activity.java:2881) 
                      at android.support.v4.app.FragmentActivity.onCreatePanelMenu(FragmentActivity.java:328) 
                      at android.support.v7.view.WindowCallbackWrapper.onCreatePanelMenu(WindowCallbackWrapper.java:98) 
                      at android.support.v7.app.AppCompatDelegateImplBase$AppCompatWindowCallbackBase.onCreatePanelMenu(AppCompatDelegateImplBase.java:335) 
                      at android.support.v7.app.AppCompatDelegateImplV9.preparePanel(AppCompatDelegateImplV9.java:1368) 
                      at android.support.v7.app.AppCompatDelegateImplV9.doInvalidatePanelMenu(AppCompatDelegateImplV9.java:1648) 
                      at android.support.v7.app.AppCompatDelegateImplV9$1.run(AppCompatDelegateImplV9.java:140) 
                      at android.os.Handler.handleCallback(Handler.java:739) 
                      at android.os.Handler.dispatchMessage(Handler.java:95) 
                      at android.os.Looper.loop(Looper.java:148) 
                      at android.app.ActivityThread.main(ActivityThread.java:5527) 
                      at java.lang.reflect.Method.invoke(Native Method) 
                      at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:730) 
                      at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:620) 

を私は知らないが、基本的に私は変更するかわかりませんエラーを除去するためにに各ライン:

@Override 
public boolean onCreateOptionsMenu(Menu menu) { 
    getMenuInflater().inflate(R.menu.menu_search, menu); 
    // Retrieve the SearchView and plug it into SearchManager 
    MenuItem searchItem = menu.findItem(R.id.search); 
    final SearchView searchView = (SearchView) MenuItemCompat.getActionView(searchItem); 

    searchItem.expandActionView(); 
    MenuItemCompat.setOnActionExpandListener(searchItem, new MenuItemCompat.OnActionExpandListener() { 
     @Override 
     public boolean onMenuItemActionExpand(MenuItem item) { 
      Toast.makeText(getApplicationContext(), "Open", Toast.LENGTH_LONG).show(); 
      return true; 
     } 

     @Override 
     public boolean onMenuItemActionCollapse(MenuItem item) { 
      Toast.makeText(getApplicationContext(), "Back_Press", Toast.LENGTH_LONG).show(); 
      finish(); 
      return true; 
     } 
    }); 

答えて

0

は、私は同じ2日前に走ったとSupportMenuItemの代わりのMenuItemを使用することによってそれを解決しました。下のコードは、SearchViewを展開/折りたたむ際の反応として、FilterViewのメニュー項目(in)/別のSupportMenuItemの表示方法を示しています。

final SupportMenuItem searchItem = (SupportMenuItem) menu.findItem(R.id.action_search); 

searchItem.setSupportOnActionExpandListener(new MenuItem.OnActionExpandListener() { 
    @Override 
    public boolean onMenuItemActionExpand(MenuItem menuItem) { 
     filterItem.setVisible(false); 
     return true; 
    }  

    @Override 
    public boolean onMenuItemActionCollapse(MenuItem menuItem) { 
     filterItem.setVisible(true); 
     //adp.cleanMap(); 
     return true; 
    }  
}); 

は、ここで私は、そのソリューションに来た方法は次のとおりです。 bug in the 26.0.0-alpha1 releaseについての1つのヒントがあります。私のコードをデバッグすると、問題がコードパス "appcompat-v7/26.0.0-alpha1/appcompat-v7-26.0.0-alpha1-sou> rces.jar!/ android/support/v7/view/menu/MenuItemImpl.java "がデバッガに表示されました。私はその後、私はそれを

@Override 
public SupportMenuItem setSupportOnActionExpandListener(
    MenuItem.OnActionExpandListener listener) { 
    mOnActionExpandListener = listener; 
    return this; 
} 

を説明した作品のようにそれをやってみてくださいを与える作られ、同様にそのソースに次の関数を見つけ

@Override 
public MenuItem setOnActionExpandListener(MenuItem.OnActionExpandListener listener) { 
    throw new UnsupportedOperationException(
    "This is not supported, use MenuItemCompat.setOnActionExpandListener()"); 
} 

:そのソースファイルをチェックすることで、我々が実行されているメッセージを明らかにしました私にとって完璧です。これに関するコメント? SupportMenuItemを使用するのは悪い考えですか?実際には、私のbuild.gradleには "com.android.support:appcompat-v7:26.+"が含まれています。

+0

私たちはSupportMenuItemの入力をさらに待つ必要があります。これは奇妙なバグですが、うまくいけばあなたの修正は正しいです!私はそれが動作し、答えとしてマークする場合、あなたにお知らせします。 – tccpg288

関連する問題