【问题标题】:one menu item for two actions两个操作的一个菜单项
【发布时间】:2015-05-04 16:22:50
【问题描述】:

我配置了选项菜单,其中一项用于在后台启用服务。

当操作发生时,我将项目标题从“启用服务”更改为“禁用服务”并相应地设置一个布尔值。

当应用程序关闭然后重新加载类时,问题就开始了。布尔值将被重置为初始值。

我想知道的是:

  1. 让一个项目菜单根据其状态执行不同操作的最佳做​​法是什么。
  2. 将布尔值保持在最后一个状态的最佳做法是什么? (共享偏好?)

【问题讨论】:

  • 是的,您将boolean 保留在preferences 中,并且每次检查值并更新它。
  • 你应该使用共享首选项。
  • 使用开关“Awsome Service state ON/OFF”代替标题更改按钮

标签: android menuitem optionmenu


【解决方案1】:

如果您想存储原始值,那么最佳做法是使用共享首选项,然后当用户关闭应用程序时,您可以将值存储在共享首选项中,然后下次用户打开应用程序时可以简单地从共享偏好中获得价值。

通过使用单个菜单项,您可以根据从共享偏好中获得的值来处理“启用服务”和“禁用服务”这两个操作。

【讨论】:

  • 谢谢大家,我最终做的是确实使用共享首选项来存储布尔值,一件棘手的事情是,当重新加载类时,菜单xml文件中配置的标题也被加载并且不描述真实状态。所以我使用 onprepareoptionmenu 根据共享首选项中存在的布尔值设置标题。希望对其他人有所帮助'
【解决方案2】:

1.) 将其放在同一个地方,同时使用不同的图标/名称相互区分。例如(开/关)名称/图标。

2.) 使用共享首选项将是可行的方法,因为您只存储原始值。它比使用 sqlite 更快。

【讨论】:

    【解决方案3】:

    我做这样的事情 当你加载你的活动时..

    SharedPreferences sharedPreferences;
    static int currentAction;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_setting);
        SharedPreferences sharedPreferences = getApplicationContext().getSharedPreferences("MyAction", Context.MODE_PRIVATE);
        if (sharedPreferences.getInt("Action", 0) == 0) {  //  0 for Enable Service
            // set menu as Enable
            currentAction = 0;
        } else {   //  1 for Disable service
            // set menu as Disable
            currentAction = 1;
        }
    
    }
    

    然后当你点击菜单项时..

    if (currentAction == 0) {
            //Do Action for Enable and change Action
            currentAction = 1;
        } else {
            //Do Action for Disable and change Action
            currentAction = 1;
        }
        SharedPreferences.Editor editor = sharedPreferences.edit();
        editor.putInt("Action", currentAction);
        editor.commit();
        }
    

    希望它的帮助...!!

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2012-04-21
      • 2012-12-29
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-03-09
      相关资源
      最近更新 更多