请帮助Switch菜单初始化

时间:2015-05-05 12:16:21

标签: android menu bluetooth switch-statement

我是开发Android应用的初学者。我想使用菜单上的蓝牙连接栏(操作栏?)。但是,我无法使用sw_Bt.setChecked()切换蓝牙状态 这是我的onCreateOptionsMenu

@Override
    public boolean onCreateOptionsMenu(Menu menu) {
        // Inflate the menu; this adds items to the action bar if it is present.
        MenuInflater mInflater = getMenuInflater();
        mInflater.inflate(R.menu.menu_main, menu);

        mBluetoothAdapter = BluetoothAdapter.getDefaultAdapter();
        if (!mBluetoothAdapter.isEnabled()) {
            menu.findItem(R.id.sw_BT).setChecked(false);
        } else {
            menu.findItem(R.id.sw_BT).setChecked(true)
        }
        return super.onCreateOptionsMenu(menu);
//        return true;
    }

switch_bluetooth.xml

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:orientation="horizontal"
    android:layout_width="fill_parent"
    android:layout_height="match_parent"
    tools:showIn="@layout/menu_main">

    <TextView
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="@string/bluetooth_connect"
        android:textColor="@color/text"
        android:textSize="15dp"
        android:layout_gravity="center_vertical"/>
    <Switch
        android:id="@+id/sw_BT"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_gravity="center_vertical"
        android:textOn="@string/connect"
        android:textOff="@string/disconnect"/>

</LinearLayout>

menu_main.xml

<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=".MainActivity">
    <item android:id="@+id/sw_BT"
        android:title=""
        app:showAsAction="always"
        app:actionLayout="@layout/switch_bluetooth"/>
</menu>

1 个答案:

答案 0 :(得分:0)

您应该使用onPrepareOptionsMenu代替onCreateOptionsMenu。 onCreateOptionsMenu被称为初始化菜单的。每次显示菜单前都会调用onPrepareOptionsMenu。

@覆盖

public boolean onPrepareOptionsMenu(Menu menu) {
    mBluetoothAdapter = BluetoothAdapter.getDefaultAdapter();
    if (!mBluetoothAdapter.isEnabled()) {
        menu.findItem(R.id.sw_BT).setChecked(false);
    } else {
        menu.findItem(R.id.sw_BT).setChecked(true)
    }
    return true;
}

同样,当状态发生变化时,请致电invalidateOptionsMenu()再次致电onPrepareOptionsMenu。