【问题标题】:save the state of button in android在android中保存按钮的状态
【发布时间】:2016-02-22 12:33:30
【问题描述】:

我正在开发相机应用程序,我有两个 imageview,一个是 auto,第二个是 pro,当我点击 auto 时,我想要选择 auto 并且图像图标发生变化,当我点击 pro 时,自动取消选择 auto view 并选择 pro view

autobtn.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            autobtn.setImageResource(R.drawable.autoactive);
            SharedPreferences sharedPreferences = PreferenceManager.getDefaultSharedPreferences(ModeActivity.this);
            SharedPreferences.Editor edit = sharedPreferences.edit();
            edit.putString("focus_value", "focus_mode_auto");
            Intent it = new Intent(ModeActivity.this, MainActivity.class);
            startActivity(it);
            edit.commit();
            //MainActivity.grid.setVisibility(View.VISIBLE);
        }
    });

在第二张图片中亲被选中

【问题讨论】:

    标签: android android-layout android-intent sharedpreferences


    【解决方案1】:

    您的自动按钮

    autobtn.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            autobtn.setBackgroundResource(R.drawable.autoactive);     //Change the AUTO image to selected
            proButton.setBackgroundResource(R.drawable.proinactive);  //Change image PRO to deselected
            SaveButtonState("focus_mode_auto");                       //Save the button state
    
            Intent it = new Intent(ModeActivity.this, MainActivity.class);
            startActivity(it);
        }
    });
    

    您的 PRO 按钮

    proButton.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            autoButton.setBackgroundResource(R.drawable.autoinactive);   //Change the AUTO image to deselected
            proButton.setBackgroundResource(R.drawable.proactive);       //Change PRO image to selected
            SaveButtonState("focus_mode_pro");                           //Save the button state
    
            Intent it = new Intent(ModeActivity.this, MainActivity.class);
            startActivity(it);
        }
    });
    

    保存方法

    public void SaveButtonState(String bState){
        SharedPreferences sharedPreferences = PreferenceManager.getDefaultSharedPreferences(ModeActivity.this);
        SharedPreferences.Editor edit = sharedPreferences.edit();
        edit.putString("focus_value", bState);
        edit.commit();
    }
    

    加载方法

    public String LoadButtonState(){  
        SharedPreferences preferences = PreferenceManager.getDefaultSharedPreferences(this);   
        String buttonState = preferences.getString("focus_value", "DEFAULT");
        return buttonState;
    }
    

    在您的 onCreate() 中使用 LoadButtonState() 在您的应用程序启动时检索按钮的最后状态,例如:

    在您的 onCreate() 方法中

    String buttonState = LoadButtonState();
    
    if(buttonState.equals("focus_mode_auto"){
        aautobtn.setBackgroundResource(R.drawable.autoactive);      //Change the AUTO image to selected
        proButton.setBackgroundResource(R.drawable.proinactive);    //Change image PRO to deselected
    }
    else if(buttonState.equals("focus_mode_pro"){
        autoButton.setBackgroundResource(R.drawable.autoinactive);  //Change the AUTO image to deselected
        proButton.setBackgroundResource(R.drawable.proactive);      //Change PRO image to selected
    }
    

    类似的东西。

    【讨论】:

      【解决方案2】:

      您可以像这样使用 SharedPreferences。

      SharedPreferences sharedPreferences; 
      
      sharedPreferences = PreferenceManager.getDefaultSharedPreferences(ModeActivity.this);
              SharedPreferences.Editor edit = sharedPreferences.edit();
              edit.putBoolean("focus_value", false);
              edit.putBoolean("auto_value", false); 
              edit.commit();
      

      在您的按钮事件中,

      autobtn.setOnClickListener(new View.OnClickListener() {
          @Override
          public void onClick(View v) {
      
              boolean auto = edit.getBoolean("auto_value", false);
              boolean pro = edit.getBoolean("pro_value", false);
      
              if(!auto){
                  edit.putBoolean("auto_value", true);
                  autobtn.setImageResource(R.drawable.autoactive);
                  edit.putBoolean("pro_value",false);
                  probtn.setImageResource(R.drawable.xxxxx);
              }
      
              Intent it = new Intent(ModeActivity.this, MainActivity.class);
              startActivity(it);
      
          }
      });
      

      【讨论】:

      • 我们在哪些活动中使用了共享偏好
      • 在 ModeActivity 但您可以访问任何其他活动中的值
      【解决方案3】:

      您在实际保存SharedPreference 中的值之前启动活动,这就是为什么您无法获取MainActivity 中保存的值(可能是因为您试图获取onCreate 中的值@987654324 @)。

      动起来

      edit.commit();
      

      之前

      Intent it = new Intent(ModeActivity.this, MainActivity.class);
      

      更新onResume中执行此操作

      SharedPreferences sharedPreferences = PreferenceManager.getDefaultSharedPreferences(ModeActivity.this);
      String selectedBtn = SharedPreferences.getString("focus_value", "nothing_selected");
      if(selectedBtn.equlas("focus_mode_auto"))
          // Select the auto button
      else 
          // select the pro button
      

      【讨论】:

      • 嘿 Rohit 如何在我取消选择之前保存自动状态。
      • 默认情况下,您将自动保存为在SharedPreference 中选择的。单击按钮时,检查SharedPreference 中的值并设置新值。如果最初选择自动,现在保存专业版,反之亦然。
      • 默认情况下两者都未选中,毫无疑问我选择自动专业版时未选中,反之亦然,但是当从其他活动返回此活动时,两者都未选中如何保存它
      【解决方案4】:

      是的,您可以将已使用的按钮状态保存在 Prefresences 中,并在两个按钮的单击侦听器处理程序上更改它们的状态

      【讨论】:

      • 我的第一个活动是主要活动之后的主要活动,这个活动在选择自动时打开,毫无疑问它被选中,但是当我回来通过主要活动时,它再次取消选择如何保存它
      • 当你按下onResume方法时的保存方式被称为将你的检查放在onresume方法中
      【解决方案5】:

      我认为您可以为此使用复选框并为此复选框创建选择器。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2015-04-19
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多