菜单中的开/关切换不以编程方式返回状态

时间:2014-12-03 14:07:37

标签: java android menu menuitem

我在菜单中添加了开/关开关。我想吐司" Switch是OFF"如果开关是"关"。但是当我从菜单开启电源时,它没有工作。我试图调试它,如果语句" if(id == R.id.myswitch)"。我试图按下简单的按钮控制它"单击按钮"。但是切换不起作用。

我已经夸大了布局" switch_layout.xml"在menuitem中

这是xml和代码:

switch_layout.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"
    android:orientation="horizontal" >

    <Switch
        android:id="@+id/switchForActionBar"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_alignParentLeft="true"
        android:layout_alignParentTop="true"
        android:layout_marginLeft="20dp"
        android:layout_marginRight="20dp"
        android:layout_marginTop="10dp" />

</RelativeLayout>

menu.xml文件

<menu xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    tools:context=".MyActivity" >

     <item
        android:id="@+id/myswitch"
        android:title=""
        android:showAsAction="always"
        android:actionLayout="@layout/switch_layout"
    />   
</menu>

 @Override
    public boolean onCreateOptionsMenu(Menu menu) {

        getMenuInflater().inflate(R.menu.menu, menu);
        return true;
    }

    @Override
    public boolean onOptionsItemSelected(MenuItem item) {

        int id = item.getItemId();

         if (id==R.id.myswitch){

            Switch onOff=(Switch) item.getActionView();
            if( onOff.isChecked()==false){

//Toast that switch is off
            }

        }
        return super.onOptionsItemSelected(item);
    }

2 个答案:

答案 0 :(得分:1)

if (id == R.id.myswitch) {
        View view = item.getActionView();
        if (view != null) {
            Switch onOff = (Switch) view
                    .findViewById(R.id.switchForActionBar);
            if (onOff!=null) {
                if (onOff.isChecked()) {
                    Toast.makeText(context,
                            "Switch is ON",
                            Toast.LENGTH_LONG).show();
                }
                else {
                    Toast.makeText(context,
                            "Switch is OFF",
                            Toast.LENGTH_LONG).show();
                }
            }
            else {
                Toast.makeText(context,
                        "Switch is null",
                        Toast.LENGTH_LONG).show();
            }

        }
        else {
            Toast.makeText(context,
                    "view is null",
                    Toast.LENGTH_LONG).show();
        }

    }

尝试此代码,如果它的工作,但我不确定它是否有效。这只是猜测。

或者您可以尝试以下代码。

@Override
public boolean onCreateOptionsMenu(Menu menu) {

    getMenuInflater().inflate(R.menu.main, menu);
    return true;
}

boolean bSwitch=false;
@Override
public boolean onPrepareOptionsMenu(Menu menu) {
    // TODO Auto-generated method stub
    int id = menu.getItem(0).getItemId();
    if (id == R.id.myswitch) {
        if (bSwitch) {
            menu.getItem(0).setTitle("smthng is ON");
        }
        else {
            menu.getItem(0).setTitle("smthng is OFF");
        }
    }
    return true;
}

@Override
public boolean onOptionsItemSelected(MenuItem item) {

    int id = item.getItemId();

    if (id == R.id.myswitch) {
        if (bSwitch) {
            bSwitch=false;
        }
        else {
            bSwitch=true;
        }

    }
    return super.onOptionsItemSelected(item);
}

<menu xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
tools:context="com.newshunt.news.MainActivity" >

<item
    android:id="@+id/myswitch"
    android:orderInCategory="100"
    android:showAsAction="always"
    android:title="smthng is OFF"/>
</menu>

答案 1 :(得分:0)

 if (id==R.id.myswitch){

            Switch onOff=(Switch) item.getActionView();
          //  if( onOff.isChecked()==false){
            if ( !onOff.isChecked())
                 //Toast that switch is off
            }

 }

尝试上面的代码并检查哪个ID是getID()正在返回