Intereting Posts
Поиск более универсального события onUserInteraction () – не только в одном действии Широковещательный приемник для обнаружения запуска приложения Как изменить цвет текста в SlidingTabLayout? Что такое хороший учебник по использованию ORMLite с SQLite и Android Отмена выбора RadioButton – альтернативный метод Callback Listener в Unity – как вызвать метод файла скриптов из UnityPlayerActivity в Android Ошибка импорта android.support.v7.widget.CardView в Eclipse Создание кнопки на панели инструментов Android Лучший планшет Android для разработки Когда вызывается метод getApplicationContext () класса Application? Android предпочтение резюме. Как установить 3 строки в резюме? Как остановить активность в android, используя намерение? Getmeasuredheight () и getmeasuredwidth () возвращает 0 после View.measure () Android – Как загрузить приложение HelloWorld на свой телефон? Вид родительского дна скрывается с макетом родительского центра на открывающей клавиатуре

SwitchCompat в панели действий с фрагментом

Я получаю сообщение об ошибке при попытке установить SwitchCompat в панель действий.

Вот мой abswitch.xml

<?xml version="1.0" encoding="utf-8"?> <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" android:id="@+id/abswitch" android:layout_width="fill_parent" android:layout_height="match_parent" android:orientation="horizontal" > <android.support.v7.widget.SwitchCompat android:id="@+id/switchForActionBar" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_centerVertical="true" android:text="" /> </RelativeLayout> 

Вот мой profile_menu.xml

 <?xml version="1.0" encoding="utf-8"?> <menu xmlns:android="http://schemas.android.com/apk/res/android" xmlns:app="http://schemas.android.com/apk/res-auto"> <item android:id="@+id/myswitch" android:title="" app:showAsAction="always" android:actionLayout="@layout/abswitch"/> </menu> 

И здесь 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

 <item android:id="@+id/toggleservice" app:actionViewClass="android.support.v7.widget.SwitchCompat" app:showAsAction="always" android:title=""/> 

И в профиле.

 @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); } 

Теперь его работа. Спасибо всем!

Solutions Collecting From Web of "SwitchCompat в панели действий с фрагментом"

Вместо:

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

Ты должен сделать:

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

Или так