Android - Обращение к Menu из другой процедуры

135
06 декабря 2019, 13:10

Помогите советом. приложение в ActionBar выводиться иконка с "Блутусом" При запуске приложение проверяет включен ли блютус или нет если включен то выводит иконку ВКЛЮЧЕН блутус если нет то выводит ВЫКЛЮЧЕН блютус

если блютус ВЫКЛЮЧЕН по нажатию на иконку он включается и иконка должна поменять свой вид

у меня есть 3 процедуры

Инициализирую ActionBar + отсылаю запрос в процедуру /BT_icon_actionBar(this);/ на проверку включен ли БТ или нет

//инициализируем меню актин бар с кнопкой блутус
@Override
public boolean onCreateOptionsMenu(Menu menu) {
    MenuInflater inflater = getMenuInflater();
    inflater.inflate(R.menu.action_bar_menu, menu);
    //должны понять включен ли блютус на устройстве или нет от этого вывести иконку
    BT_icon_actionBar(this);
    //должны понять включен ли блютус на устройстве или нет от этого вывести иконку
    return true;
 }
 //инициализируем меню актин бар с кнопкой блутус

проверяю в др. процедуре /bluetooth_enb_dsbl.Bl_ebl_dsbl/ включен или нет (возвращает 1 или 0) и рисую от этого иконку если в процедуре 1 и 2 заменить отсылаемый параметр на /menu/ то работает но!

//рисуем иконки в актион бар
//public void BT_icon_actionBar(Menu menu) {
public void BT_icon_actionBar(Context appContext) {
MenuItem feed = menu.findItem(R.id.menu_bluetooth);
if (bluetooth_enb_dsbl.Bl_ebl_dsbl(this) == 0) {
    feed.setIcon(R.drawable.ic_action_bar_bluetooth_disabled);
} else {
   feed.setIcon(R.drawable.ic_action_bar_bluetooth_enabled);
  }
 }
//рисуем иконки в актион бар

3 процедура обработки кнопок меню - и если я в эту процедуру отсылаю параметр menu то он не к чему не привязан , если я добавляю в Menu menu к параметрам процедуры - то она перестает быть переопределенной и кнопки не обрабатывают нажатия поэтому я решил отсылать отсылать this в надежде что смогу через него обратиться к Menu - но пока не получается

//обработка нажатий кнопок в ActionBar
@Override
public boolean onOptionsItemSelected(MenuItem item) {
    switch (item.getItemId()) {
        case R.id.menu_bluetooth:
            //Включаем bluetooth. Если он уже включен, то ничего не произойдет
            String enableBT = BluetoothAdapter.ACTION_REQUEST_ENABLE;
            startActivityForResult(new Intent(enableBT), 0);
            //Menu menu = this.findItem(R.id.menu_bluetooth);
            BT_icon_actionBar(this);
            return true;
        //case R.id.menu_bluetooth:
        //
        //  return true;
        default:
            return false;
    }
}
//обработка нажатий кнопок в ActionBar
Answer 1

не знаю правильно или нет я сделал следующим образом: по совету поменял название метода на onBtIconActionBar() и сделал его с двумя параметрами

public void onBtIconActionBar(Menu menu, MenuItem item) {
        if (menu == null){
            if (bluetooth_enb_dsbl.Bl_ebl_dsbl(this) == 0) {
                item.setIcon(R.drawable.ic_action_bar_bluetooth_disabled);
            } else {
                item.setIcon(R.drawable.ic_action_bar_bluetooth_enabled);
            }
        }
        if (item == null){
            MenuItem feed = menu.findItem(R.id.menu_bluetooth);
            if (bluetooth_enb_dsbl.Bl_ebl_dsbl(this) == 0) {
                feed.setIcon(R.drawable.ic_action_bar_bluetooth_disabled);
            } else {
                feed.setIcon(R.drawable.ic_action_bar_bluetooth_enabled);
            }
        }
    }

и вызываю его по разному

onBtIconActionBar(menu,null); или onBtIconActionBar(null, item);

Но я уверен можно сделать изящнее

READ ALSO
Получить файл с удаленного компьютера

Получить файл с удаленного компьютера

Подскажите, пожалуйста, советом

107
Хранилище для графа

Хранилище для графа

Мне необходимо хранить, обновлять и отдавать по запросу некоторые элементы графаПод графом в данном случае я подразумеваю его представление...

144
Когда используется iterator не в цикле foreach?

Когда используется iterator не в цикле foreach?

Бывают ли такие случаи, когда нужно прописывать и работать напрямую с итератором а не в foreach?

118
В файле медиа запросов не работает адаптация для смартфона

В файле медиа запросов не работает адаптация для смартфона

В одном и том же файле делают медиа запрос для:

142