2012-01-04 2 views
0

У меня есть пункт меню, который позволяет пользователю включать и выключать gps. В onCreate() активность проверяет состояние gps и использует соответствующие ресурсы (2 разных значка). Как я динамически обновляю Значки элементов? Я пробовал код ниже, но у меня есть отставание: пользователь должен нажать элемент и дважды ввести настройки местоположения и безопасности для обновляемого меню. Спасибо.Динамически меняются пункты меню

@Override 
    public boolean onOptionsItemSelected(MenuItem item) { 
     // TODO Auto-generated method stub 

     switch (item.getItemId()) { 
      case R.id.GPS: 
      startActivity(new Intent(Settings.ACTION_LOCATION_SOURCE_SETTINGS)); 
      LocationManager locationManager = (LocationManager) getSystemService(LOCATION_SERVICE); 
     if (locationManager.isProviderEnabled(LocationManager.GPS_PROVIDER)) { 

      item.setIcon(R.drawable.gps_off); 

     } else { 
      item.setIcon(R.drawable.gps); 
     } 

     break; 

}

ответ

2

вы должны переопределить onPrepareOptionMenu для того, чтобы изобразить ваши изменения каждый раз, когда меню конструируется. Следуйте примеру:

@Override 
public boolean onPrepareOptionsMenu(Menu menu) { 
    MenuItem mi = (MenuItem) menu.findItem(R.id.GPS); 

    LocationManager locationManager = (LocationManager) getSystemService(LOCATION_SERVICE); 

    /*do your changes with its icon*/ 
    item.setIcon(locationManager.isProviderEnabled(LocationManager.GPS_PROVIDER)? R.drawable.gps_off : R.drawable.gps); 

    return super.onPrepareOptionsMenu(menu); 
} 
+0

Спасибо! Работает как шарм. –

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