2014-09-23 60 views
2

我一直在试图做的是保存与sharedpreferences按下按钮时的状态。当按钮是默认的时候,它是白色的,但是当按下时,它是黑色的。即使当我按下返回按钮或从其他活动或应用程序返回时,我也希望该按钮保持黑色。我一直在努力解决这个问题几天,这让我觉得我的编程不是很好。请问有人能帮我吗?这是我的代码。如何保持按钮颜色

fb1 = (Button) findViewById(R.id.button1); 
fb1.setBackgroundResource(R.drawable.not_pressed); 
    fb1.setOnClickListener(new OnClickListener() { 
     boolean isPressed = true; 
     //boolean isPressed1 = true; 

     @Override 
     public void onClick(View v) { 
      //isPressed = sharedPrefs.getBoolean("locked", false); 
      fb1.setEnabled(sharedPrefs.getBoolean("locked", true)); 
      System.out.println("BOOL" + isPressed); 
      if (!isPressed) { 
       fb1.setBackgroundResource(R.drawable.not_pressed); 
       fr1 = 0; 
       //fb1.setEnabled(false); 
       //sharedPrefs.edit().putBoolean("locked", fb1.isEnabled()).commit(); 
      } else { 
       fb1.setBackgroundResource(R.drawable.pressed); 
       fr1 = 128; 
       //fb1.setEnabled(true); 
       //savePreferences("locked", fb1.isEnabled()); 
       sharedPrefs.edit().putBoolean("locked", fb1.isEnabled()).commit(); 
      } 
      isPressed = !isPressed; 
     } 
    }); 
+0

你为什么会注释掉isPressed = sharedPrefs.getBoolean()调用?如果您不更改其默认值,isPressed将始终为真。当您的按钮处于“按下”状态时,您也只是将状态保存为共享首选项。 – personne3000 2014-09-30 08:24:01

回答

0

首先创建一个常量类,并在其声明一个静态变量:

public class Constants(){ 
public static boolean isPressed = false; 
} 

现在,用你的Activity类这里面的静态变量按事件存储在整个应用程序生命周期的按钮。

fb1 = (Button) findViewById(R.id.button1); 
fb1.setBackgroundResource(R.drawable.not_pressed); 
fb1.setOnClickListener(new OnClickListener() { 
    if (!Constants.isPressed) {   //if button is not pressed it is set to white color(initially false) 
      fb1.setBackgroundResource(R.drawable.not_pressed); 
      fr1 = 0; 
      //fb1.setEnabled(false); 
      //sharedPrefs.edit().putBoolean("locked", fb1.isEnabled()).commit(); 
     } else {      //if pressed to black 
      fb1.setBackgroundResource(R.drawable.pressed); 
      fr1 = 128; 
      //fb1.setEnabled(true); 
      //savePreferences("locked", fb1.isEnabled()); 
      sharedPrefs.edit().putBoolean("locked", fb1.isEnabled()).commit(); 
     } 
    @Override 
    public void onClick(View v) { 
     //isPressed = sharedPrefs.getBoolean("locked", false); 
     fb1.setEnabled(sharedPrefs.getBoolean("locked", true)); 
     System.out.println("BOOL" + isPressed); 
     Constants.isPressed = true;   //Sets is pressed to true throughout lifecycle of your app. 
     //Execute other onPressed logic here 
    } 
}); 

这可能会解决您的问题。

0

您可以使用选择器来选择要显示的颜色 - 这是例如使用选择:

<?xml version="1.0" encoding="utf-8" ?> 

<item 
    android:state_enabled="false" 
    android:drawable="@drawable/remove_contacts_button_disabled" 
    /> 
<item 
    android:state_enabled="true" 
    android:state_pressed="true" 
    android:drawable="@drawable/remove_contacts_button_highlighted" 
    /> 
<item 
    android:drawable="@drawable/remove_contacts_button_regular" 
    /> 

在onClikLisitner在共享偏好保存您想要什么单击。