动态更改菜单项

时间:2012-01-04 12:54:59

标签: android

我有一个允许用户打开和关闭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;

}

1 个答案:

答案 0 :(得分: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);
}