我想为我的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"/>
答案 0 :(得分:0)
条件检查中有错误:
if (on = true) {
tb.setChecked(true);
} else {
tb.setChecked(false);
}
在Java中,使用==
进行比较 - 在代码中,on的值在if的条件部分设置为true
,因此onCreate始终设置ToggleButton
检查。
作为旁注,将布尔值与true进行比较是一个坏习惯 - 如果只是测试if (on)
,则通常是更易读的代码。但是在您的情况下甚至不需要此测试 - 您只需使用tb.setChecked(on)