2015-05-05 3 views
0

Я начинаю разрабатывать приложения для Android. Я хочу использовать панель подключения Bluetooth в меню (панель действий?). Однако я не могу получить состояние Bluetooth для переключения с помощью sw_Bt.setChecked() Вот мой onCreateOptionsMenuПожалуйста, помогите в меню Switch для инициализации

@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

Добро пожаловать в переполнение стека. Не могли бы вы описать ошибку, с которой вы столкнулись. «Я не могу получить состояние Bluetooth» не очень точно. –

+0

ну ... я хочу получить свое состояние активации Blooth на моей панели действий (переключатель), однако он не работает setChecked(). у него нет времени выполнения или другой ошибки, но в приложении переключатель не меняется, когда я включаю Bluetooth в свой телефон –

ответ

0

Вы должен использовать onPrepareOptionsMenu для этого вместо onCreateOptionsMenu. onCreateOptionsMenu называется для инициализации меню. onPrepareOptionsMenu вызывается каждый раз перед отображением меню.

@Override

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 снова.

+0

Thks для ответа, я добавил onPrepareOptionsMenu(), но это не сработало ... ошибок нет, но выключатель не менялся в зависимости от состояния (активации) –

Смежные вопросы