【问题标题】:Switch in action bar doesn't work correctly切换操作栏无法正常工作
【发布时间】:2015-03-18 10:45:04
【问题描述】:

我想将 Switch 放入 Action Bar 并设置为 Switch OnCheckedChangeListener。 这是我的代码: check_words_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/switch_action_bar"/>
</menu>

switch_action_bar.xml

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="fill_parent"
android:layout_height="match_parent">

<Switch
    android:id="@+id/switchForActionBar"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"/>

</RelativeLayout>

SomeFragment.java

public class SomeFragment extends Fragment implements CompoundButton.OnCheckedChangeListener {
// ...
@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setHasOptionsMenu(true);
}

@Override
public void onCreateOptionsMenu(Menu menu, MenuInflater inflater) {
    inflater.inflate(R.menu.check_words_menu, menu);
    MenuItem item = menu.findItem(R.id.myswitch);
    item.setActionView(R.layout.switch_action_bar);
    Switch mySwitch = (Switch) item.getActionView();
    mySwitch.setOnCheckedChangeListener(this);
    super.onCreateOptionsMenu(menu, inflater);
}

@Override
public boolean onOptionsItemSelected(MenuItem item) {
    return super.onOptionsItemSelected(item);
}

@Override
public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) {
    // some code
}

运行后我得到 ClassCastException:

03-18 13:39:55.750 7206-7206/com.chubarich.android.translator E/AndroidRuntime: 致命异常: main java.lang.ClassCastException: android.widget.RelativeLayout 不能转换为 android.widget.Switch 在 com.chubarich.android.translator.CheckWordsFragment.onCreateOptionsMenu(CheckWordsFragment.java:65) 在 android.app.FragmentManagerImpl.dispatchCreateOptionsMenu(FragmentManager.java:1871) 在 android.app.Activity.onCreatePanelMenu(Activity.java:2714) 在 android.support.v4.app.FragmentActivity.onCreatePanelMenu(FragmentActivity.java:275) 在 android.support.v7.app.ActionBarActivity.superOnCreatePanelMenu(ActionBarActivity.java:276) 在 android.support.v7.app.ActionBarActivityDelegate$1.onCreatePanelMenu(ActionBarActivityDelegate.java:79) 在 android.support.v7.app.ActionBarActivityDelegateBase.preparePanel(ActionBarActivityDelegateBase.java:979) 在 android.support.v7.app.ActionBarActivityDelegateBase.doInvalidatePanelMenu(ActionBarActivityDelegateBase.java:1182) 在 android.support.v7.app.ActionBarActivityDelegateBase.access$100(ActionBarActivityDelegateBase.java:79) 在 android.support.v7.app.ActionBarActivityDelegateBase$1.run(ActionBarActivityDelegateBase.java:115) 在 android.view.Choreographer$CallbackRecord.run(Choreographer.java:725) 在 android.view.Choreographer.doCallbacks(Choreographer.java:555) 在 android.view.Choreographer.doFrame(Choreographer.java:524) 在 android.view.Choreographer$FrameDisplayEventReceiver.run(Choreographer.java:711) 在 android.os.Handler.handleCallback(Handler.java:615) 在 android.os.Handler.dispatchMessage(Handler.java:92) 在 android.os.Looper.loop(Looper.java:137) 在 android.app.ActivityThread.main(ActivityThread.java:4954) 在 java.lang.reflect.Method.invokeNative(Native Method) 在 java.lang.reflect.Method.invoke(Method.java:511) 在 com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:798) 在 com.android.internal.os.ZygoteInit.main(ZygoteInit.java:565) 在 dalvik.system.NativeStart.main(Native Method)

65 行是 SomeFragment.java 中的Switch mySwitch = (Switch) item.getActionView();。 请告诉我,我的代码有什么问题?

【问题讨论】:

    标签: android android-fragments android-actionbar


    【解决方案1】:
     Switch mySwitch = (Switch) item.getActionView();
    

    将上面的行改为

    View actionView=item.getActionView();
    Switch mySwitch = (Switch)actionView.findViewById(R.id.switch_id);
    

    【讨论】:

      猜你喜欢
      • 2019-01-11
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-11-18
      • 2018-12-09
      相关资源
      最近更新 更多