簡體   English   中英

切換操作欄無法正常工作

[英]Switch in action bar doesn't work correctly

我想將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無法轉換為com.android.widget.Switch。 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。 android.support.v7.app.ActionBarActivityDelegateBase.preparePanel(java:79)(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.doFrame(Choreographer.java:555)在android.view.Choreographer.doFrame(Choreographer.java:524)在android.view.Choreographer $ FrameDisplayEventReceiver.run(Choreographer.java:711)在android.os android.os.Handler.dispatchMessage(Handler.java:92)的.Handler.handleCallback(Handler.java:615)android.os.Looper.loop(Looper.java:137)的android.app.ActivityThread.main( ActivityThread.java:4954),位於java.lang.reflect.Method.invokeNative(本地方法),位於com.android.internal.os.ZygoteInit $ MethodAndArgsCaller處的java.lang.reflect.Method.invoke(Method.java:511)。在dalvik.system.NativeStart.main(本機方法)處在com.android.internal.os.ZygoteInit.main(ZygoteInit.java:565)處運行(ZygoteInit.java:798)

65行是Switch mySwitch = (Switch) item.getActionView(); SomeFragment.java中 請告訴我,我的代碼有什么問題?

 Switch mySwitch = (Switch) item.getActionView();

將上面的行更改為

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM