【发布时间】:2012-11-29 18:02:17
【问题描述】:
我有一个包含三个活动的选项卡主机,并且在每个活动中我都有按钮。
每按一次按钮,我都会更改背景可绘制资源
那么现在如何保存所有三个子活动中每个按钮的按下状态,以便当我从一个活动移动到另一个活动时,按钮按下状态将反映在返回时。第一个活动 -> 按下所有 2 个按钮 -> 转到第二个活动 -> 返回到第一个活动 -> 第一个活动中的所有按钮都应处于按下状态并更改可绘制资源
我有两张背景图片。
按钮按下 -> 高亮背景图像 -> 第二次按下相同的按钮 -> 更改为正常背景图像
当我第一次运行应用程序时,如果我按下按钮,背景图像就会发生变化。如果我进入第二个子活动并返回,那么按钮处于按下状态并更改了可绘制资源。所以很好
第二次如果我按下相同的按钮并从第二个活动返回到相同的活动。这里它不起作用
第一个子活动 -> 按下按钮 -> 高亮背景图像更改 -> 转到第二个 tabhost 子活动 -> 返回第一个子活动 -> 按钮在按下后显示相同的背景图像(这很好)
问题是
现在您在第一个子活动中按下相同的按钮 -> 背景图像变为正常 -> 转到第二个 tabhost 子活动 -> 返回第一个子活动 -> 但按钮背景资源突出显示而不是正常
即使我再次运行应用程序,按钮也会显示高亮背景图像
我在第一个子活动中使用的以下代码
已编辑
public void onResume() {
super.onResume();
SharedPreferences sharedPreferences = this.getSharedPreferences(
"sharedPreferences", MODE_PRIVATE);
int which = sharedPreferences.getInt("sharedPreferences", 1);
switch (which)
{
case 1:
seatdirnbtn.setBackgroundResource(R.drawable.icon4); break;
case 2:
seatdirnbtn.setBackgroundResource(R.drawable.icon4hlt); break;
default:
seatdirnbtn.setBackgroundResource(R.drawable.icon4); break;
}
}
public void onPause() {
super.onPause();
boolean isclick = false;
SharedPreferences sharedPreferences = this.getSharedPreferences(
"sharedPreferences", MODE_PRIVATE);
SharedPreferences.Editor editor = sharedPreferences.edit();
if (isclick) {
seatdirnbtn.setBackgroundResource(R.drawable.icon4hlt);
editor.putInt("sharedPreferences", 2).commit();
}
}
EDIT2
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;
}
};
【问题讨论】:
-
看起来你的
onPause有条件将int2 放入SharedPrefs 但从来没有机会放入1。 -
坦率地说我很困惑。您设置了一个布尔值以始终读取
false,这样就解释了为什么一部分条件没有运行。您必须使其与单击按钮的时间相对应。然而你是说它是始终运行的 true 部分?此外,我认为通过简单的布尔标志(可能是数组)可以更好地处理切换。以及应用离开时的 SharedPrefs。 -
谢谢,我明白了你的意思,但由于我是 android 新手,所以我不知道如何准确地实现这一点。你能否请您详细说明一下如何用标志处理这个问题。跨度>
标签: android button save android-tabhost sharedpreferences