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