2012-01-04 134 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

謝謝!奇蹟般有效。 – 2012-01-04 13:45:00