Android:tabhost内的共享首选项不工作
我有一个包含三个活动的tabhost,我想保存每个活动按钮的按下状态 那么,现在我如何保存所有三个子活动中每个按钮的按下状态,以便当我从一个活动移动到另一个活动时,按钮按下状态将在向后移动时反映出来。第一个活动->所有4个按钮按下->转到第二个活动->返回第一个活动->第一个活动中的所有按钮应处于按下状态 当我转到第二个子选项卡并转到第一个子选项卡时,更改(我按下的按钮未处于按下状态)没有反映出来 谢谢你的帮助 这是我在第一个tabhost子活动中的代码Android:tabhost内的共享首选项不工作,android,button,onclick,android-tabhost,sharedpreferences,Android,Button,Onclick,Android Tabhost,Sharedpreferences,我有一个包含三个活动的tabhost,我想保存每个活动按钮的按下状态 那么,现在我如何保存所有三个子活动中每个按钮的按下状态,以便当我从一个活动移动到另一个活动时,按钮按下状态将在向后移动时反映出来。第一个活动->所有4个按钮按下->转到第二个活动->返回第一个活动->第一个活动中的所有按钮应处于按下状态 当我转到第二个子选项卡并转到第一个子选项卡时,更改(我按下的按钮未处于按下状态)没有反映出来 谢谢你的帮助 这是我在第一个tabhost子活动中的代码 @Override
@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;
}
};
可能应该重写onResume()方法,在该方法中设置按钮状态。此方法在onCreate()之后调用,甚至活动也已创建。如果您在tabHost中有活动,则不会在每次切换选项卡时创建这些活动,因此onCreate()方法只会被调用一次,而在每次切换到具有特定活动的选项卡时都会被调用onResume() 正在加载首选项的代码位于onStart()方法中。看这里。您可以看到,仅当您的活动之前已停止时才会调用此方法,但如果活动刚刚暂停,则永远不会调用此方法 编辑: 若您的代码中只有两种状态,比如问题中的状态,那个么最好使用ToggleButton,它通常也有两种状态。您可以为每个州设置不同背景的样式 然后你会有一个稍微不同的听众:
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
因此,最后您可以将此状态保存到SharedReferences:
editor.putBoolean("toggleButton1",toggleButton.isChecked());
当您需要此状态时:
boolean isChecked = sharedPreferences.getBoolean("toggleButton1",false);
toggleButton.setChecked(isChecked);
选择器将负责切换每个状态的按钮背景。您在哪里调用SavePreferences()方法?@ρρρρρK,我在onPause()中调用SavePreferences(),谢谢您的回答,public void onResume(){SavePreferences();super.onResume()我添加了这个方法,但仍然不起作用。你应该在onResume()中读取pref并设置按钮状态,而不是保存它们,因为你在onPause()中保存了它们,当你恢复时,你应该在onResume()中读取它们并设置状态。我明白你的意思。实际上,在单击每个按钮时,我正在更改按钮背景图像,那么我是否需要在共享首选项中保存可绘制的背景图像?如果是,我该怎么做?不幸的是,您不能在共享pref中存储drawable,但最好将图像映射到一些可以存储的布尔值或int值。例:State1-可提取1-真实;状态2-可提取状态2-错误。你可以从共享pref中读取布尔值,并为真值或假值设置适当的背景。感谢你提供的信息,我通过了许多链接来实现你所说的,因为我对android和java还不熟悉,所以我没有找到任何正确的启动方法。你能谈谈如何把图像映射到bolean或int吗。