首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >SwitchCompat在actionbar中,带有片段

SwitchCompat在actionbar中,带有片段
EN

Stack Overflow用户
提问于 2014-12-22 17:55:07
回答 2查看 2.4K关注 0票数 11

当试图将SwitchCompat设置为操作栏时,我会得到一个错误。

这是我的abswitch.xml

代码语言:javascript
复制
<?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

代码语言:javascript
复制
<?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来自片段

代码语言:javascript
复制
@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);
}

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

代码语言:javascript
复制
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)

提前谢谢。

对不起,堆栈溢出不能正确格式化xml的

编辑:计算出。

在profile_menu.xml中更改

代码语言:javascript
复制
<item
    android:id="@+id/toggleservice"
    app:actionViewClass="android.support.v7.widget.SwitchCompat"
    app:showAsAction="always"
    android:title=""/>

在Profile.class中

代码语言:javascript
复制
@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);
}

现在起作用了。谢谢大家!

EN

回答 2

Stack Overflow用户

发布于 2015-10-28 12:24:10

而不是:

代码语言:javascript
复制
SwitchCompat switchCompat = (SwitchCompat) MenuItemCompat.getActionView(item);

你应该这样做:

代码语言:javascript
复制
RelativeLayout relativeLayout= (RelativeLayout) MenuItemCompat.getActionView(item);
SwitchCompat switchCompat = (SwitchCompat) relativeLayout.findViewById(R.id.switchForActionBar);

至少是这样

票数 0
EN

Stack Overflow用户

发布于 2021-10-19 11:10:33

不推荐使用MenuItemCompat.getActionView(项),因此使用MenuItem.getActionView

像这样使用它

代码语言:javascript
复制
@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) item.getActionView();
    super.onCreateOptionsMenu(menu, inflater);
}
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/27607938

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档