共享首选项和Android切换按钮将无法按预期工作

时间:2014-04-26 15:38:08

标签: android sharedpreferences state togglebutton

我想为我的Android应用设置一个切换按钮,但我必须保持按钮状态以供以后使用。我试图使用sharedPreferences,我的值从pref文件返回正常,但我的按钮的文本是相同的,它不会改变。

我已经测试了:tb.setChecked(false);在我的创建结束时,它改变了" on"到"关"。但我无法通过我的代码获得相同的效果。

可能有什么不对? 谢谢!

主要代码:

public SharedPreferences spref;
final String PREF_NAME = "prefrences";
public String STATE = "state_value";
ToggleButton tb;
boolean on;

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.tour_detail);

     getActionBar().setDisplayHomeAsUpEnabled(true);
     getActionBar().setHomeButtonEnabled(true);

    Bundle b = getIntent().getExtras();
    tour = b.getParcelable(".Tour");
    isMyTours = b.getBoolean("isMyTours");
    isFollowed = b.getBoolean("isFollowed");

     Log.i(LOGTAG, "Extra passed by notif is: " + tour);

     refreshDisplay();      

     datasource = new ToursDataSource(this);

     spref = getSharedPreferences(PREF_NAME, MODE_PRIVATE);      
     tb = (ToggleButton) findViewById(R.id.buttonFollow);        

     on = spref.getBoolean("On", true);  //default is true       
     Log.i(LOGTAG, "VALUE for On is: " + on);        
     if (on = true) {            
       tb.setChecked(true);        
     } else {          
       tb.setChecked(false);
     }       
}   

public void onToggleClicked(View view) {

    on = ((ToggleButton) view).isChecked();
    if (on) {
        Toast.makeText(this, "On : Notification will be Enabled", Toast.LENGTH_SHORT).show();
        SharedPreferences.Editor editor = spref.edit();
        editor.putBoolean("On", true); // value to store
        editor.commit();
        boolean test_on = spref.getBoolean("On", true); 
        Log.i(LOGTAG, "VALUE for On is: " + test_on);

    } else {
    Toast.makeText(this, "Off : Notification will be Disabled", Toast.LENGTH_SHORT).show();
        SharedPreferences.Editor editor = spref.edit();
        editor.putBoolean("On", false); // value to store
        editor.commit();
        boolean test_on = spref.getBoolean("On", true); 
        Log.i(LOGTAG, "VALUE for On is: " + test_on);
    }  
}
XML中的

和按钮:

 <ToggleButton
            android:id="@+id/buttonFollow"
            style="?android:attr/buttonStyleSmall"
            android:layout_weight="1"  
            android:layout_width="match_parent"           
            android:layout_height="wrap_content"              
            android:background="#dedede"   
            android:textSize="12sp"    
            android:paddingTop="7dp"  
            android:paddingBottom="5dp"  
            android:drawableTop="@drawable/urmarire_detail_ico"
            android:drawablePadding="-1sp"            
            android:textOn="Vibrate on"
            android:textOff="Vibrate off" 
            android:onClick="onToggleClicked"/> 

1 个答案:

答案 0 :(得分:0)

条件检查中有错误:

 if (on = true) {            
   tb.setChecked(true);        
 } else {          
   tb.setChecked(false);
 }

在Java中,使用==进行比较 - 在​​代码中,on的值在if的条件部分设置为true,因此onCreate始终设置ToggleButton检查。

作为旁注,将布尔值与true进行比较是一个坏习惯 - 如果只是测试if (on),则通常是更易读的代码。但是在您的情况下甚至不需要此测试 - 您只需使用tb.setChecked(on)

替换块