SwitchCompat在actionbar中,带有片段

尝试将SwitchCompat设置为操作栏时出错。

这是我的abswitch.xml

    

这是我的profile_menu.xml

     

在这里onCreateOptionsMenu来自片段

 @Override public void onCreateOptionsMenu(Menu menu, MenuInflater inflater) { inflater.inflate(R.menu.profile_menu, menu); MenuItem item = menu.findItem(R.id.myswitch); item.setActionView(R.layout.abswitch); SwitchCompat switchCompat = (SwitchCompat) item.getActionView(); super.onCreateOptionsMenu(menu, inflater); } 

这是每次我尝试启动我的应用程序时得到的错误

 Process: ru.dennes544.vkapp, PID: 15974 java.lang.ClassCastException: android.widget.RelativeLayout cannot be cast to android.support.v7.widget.SwitchCompat at ru.dennes544.vkapp.Profile.onCreateOptionsMenu(Profile.java:216) at android.support.v4.app.Fragment.performCreateOptionsMenu(Fragment.java:1868) at android.support.v4.app.FragmentManagerImpl.dispatchCreateOptionsMenu(FragmentManager.java:1989) at android.support.v4.app.FragmentActivity.onCreatePanelMenu(FragmentActivity.java:276) at android.support.v7.app.ActionBarActivity.superOnCreatePanelMenu(ActionBarActivity.java:276) at android.support.v7.app.ActionBarActivityDelegate$1.onCreatePanelMenu(ActionBarActivityDelegate.java:79) at android.support.v7.widget.WindowCallbackWrapper.onCreatePanelMenu(WindowCallbackWrapper.java:49) at android.support.v7.internal.app.ToolbarActionBar.populateOptionsMenu(ToolbarActionBar.java:459) at android.support.v7.internal.app.ToolbarActionBar$1.run(ToolbarActionBar.java:69) at android.os.Handler.handleCallback(Handler.java:739) at android.os.Handler.dispatchMessage(Handler.java:95) at android.os.Looper.loop(Looper.java:135) at android.app.ActivityThread.main(ActivityThread.java:5221) 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:899) at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:694) 

提前致谢。

PS抱歉对于pastebin链接,stackoverflow没有正确格式化xml的

编辑 :想通了。

在profile_menu.xml中更改

  

在Profile.class中

 @Override public void onCreateOptionsMenu(Menu menu, MenuInflater inflater) { inflater.inflate(R.menu.profile_menu, menu); MenuItem item = menu.findItem(R.id.toggleservice); SwitchCompat switchCompat = (SwitchCompat) MenuItemCompat.getActionView(item); super.onCreateOptionsMenu(menu, inflater); } 

现在它的工作。 谢谢大家!

代替:

 SwitchCompat switchCompat = (SwitchCompat) MenuItemCompat.getActionView(item); 

你应该做:

 RelativeLayout relativeLayout= (RelativeLayout) MenuItemCompat.getActionView(item); SwitchCompat switchCompat = (SwitchCompat) relativeLayout.findViewById(R.id.switchForActionBar); 

或者