我有一个包含三个活动的tabhost,我想保存每个活动按钮的按下状态
所以现在如何在所有三个子活动中保存每个按钮的按下状态,这样当我从一个活动移动到另一个活动时,按下按钮状态将反映在向后移动。第一项活动 - >按下所有4个按钮 - >转到第二个活动 - >回到第一个活动 - >第一个活动中的所有按钮都应处于按下状态
当我转到第二个子选项卡并进入第一个子选项卡时,更改(我按下的按钮未处于按下状态)未反映
总是感谢帮助,谢谢
这是我在第一个tabhost子活动中的代码
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
seatdirnbtn.setOnClickListener(listner1);
seatdirnbtn1.setOnClickListener(listner2);
seatdirnbtn.setPressed(true);
seatdirnbtn1.setPressed(true);
this.LoadPreferences();
}
private void SavePreferences() {
SharedPreferences sharedPreferences = getApplicationContext().getSharedPreferences("sharedPreferences",MODE_WORLD_READABLE);
SharedPreferences.Editor editor = sharedPreferences.edit();
editor.putBoolean("state", seatdirnbtn.isEnabled());
editor.putBoolean("state1", seatdirnbtn1.isEnabled());
editor.commit();
}
private void LoadPreferences() {
SharedPreferences sharedPreferences = getApplicationContext().getSharedPreferences("sharedPreferences",MODE_WORLD_READABLE);
Boolean state = sharedPreferences.getBoolean("state", false);
Boolean state1 = sharedPreferences.getBoolean("state1", false);
seatdirnbtn.setPressed(state);
seatdirnbtn1.setPressed(state1);
}
@Override
protected void onStart() {
super.onStart();
LoadPreferences();
}
@Override
protected void onPause() {
SavePreferences();
super.onPause();
}
public static boolean isclick = false;
private View.OnClickListener listner1 = new View.OnClickListener() {
public void onClick(View v) {
if (isclick) {
seatdirnbtn.setBackgroundResource(R.drawable.icon4hlt);
} else {
seatdirnbtn.setBackgroundResource(R.drawable.icon4);
}
isclick = !isclick;
}
};
private View.OnClickListener listner2 = new View.OnClickListener() {
public void onClick(View v) {
if (isclick) {
seatdirnbtn1.setBackgroundResource(R.drawable.icon2hlt);
} else {
seatdirnbtn1.setBackgroundResource(R.drawable.icon2);
}
isclick = !isclick;
}
};
答案 0 :(得分:0)
可能你应该覆盖onResume()方法,你应该在其中设置按钮状态。在onCreate()之后调用此方法,甚至已经创建了活动。如果你在tabHost中有活动,那么每次在标签之间切换时都不会创建它们,因此每次切换到具有特定活动的标签时,onCreate()方法只会被调用一次但是onResume()。
加载首选项的代码在onStart()方法中。请看activity lifecycle。您可以看到,只有当您的活动之前已停止但在刚刚暂停时才会调用此方法。
修改强>
如果您的代码中只有2个状态,那么使用ToggleButton可能会更好,它通常也有2个状态。您可以将其设置为每个州具有不同的背景。 This tutorial could be helpfull
你会有一点不同的倾听者:
toggleButton.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() {
@Override
public void onCheckedChanged(CompoundButton compoundButton, boolean isChecked) {
if(checked) {
//do sth if it's checked
} else {
//do sth if it's not checked;
}
}
});
以编程方式更改它们的状态:
toggleButton.setChecked(true); //or false
所以最后你可以将这个状态保存到SharedPreferences:
editor.putBoolean("toggleButton1",toggleButton.isChecked());
当你需要这种状态时:
boolean isChecked = sharedPreferences.getBoolean("toggleButton1",false);
toggleButton.setChecked(isChecked);
选择器将负责切换每个州的按钮背景。