我是开发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>
答案 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。