我有两个活动(MainActivity和MapActivity)。两者都有菜单中的图标来停止和启动后台跟踪服务。关于usere的选择,按钮图标的图像将会改变。我正在使用sharedPrefernces存储serviceStatus
的布尔值来为图标设置正确的图像,但是当我从MainActivity出发时我遇到问题 - > MapActivity并停止MapActivity中的后台跟踪服务我总是在MainActivity的菜单中获得on
图标图像。我认为这是因为(mSharedPreference.getBoolean("sharedServiceStatus", true));
中此行onPrepareOptionsMenu()
中的真实默认值。
如何根据用户在MapActivity中的操作,第一次将其设置为ture和更高版本?此外,如果用户在MapActivity中停止服务,则该值应为false
,而不是始终为真。
MainActivity
@Override
public boolean onPrepareOptionsMenu(Menu menu) {
MenuItem item = menu.findItem(R.id.menu_toggle);
final SharedPreferences mSharedPreference = PreferenceManager
.getDefaultSharedPreferences(getBaseContext());
serviceStatus = (mSharedPreference.getBoolean("sharedServiceStatus", true));
editor = mSharedPreference.edit();
editor.apply();
if (serviceStatus) {
item.setIcon(R.drawable.on);
} else {
item.setIcon(R.drawable.off);
}
return super.onPrepareOptionsMenu(menu);
}
MapActivity:
@Override
public void onBackPressed() {
super.onBackPressed();
markerMap.clear();
stopAlarm();
if (serviceStatus) {
SharedPreferences prefs = PreferenceManager
.getDefaultSharedPreferences(this);
SharedPreferences.Editor editor = prefs.edit();
editor.putBoolean("sharedServiceStatus", serviceStatus);
editor.commit();
}
}
答案 0 :(得分:2)
您需要根据状态将服务状态设置为true或false。我认为目前你只设置为真正的
@Override
public void onBackPressed() {
super.onBackPressed();
markerMap.clear();
stopAlarm();
SharedPreferences prefs = PreferenceManager
.getDefaultSharedPreferences(this);
SharedPreferences.Editor editor = prefs.edit();
editor.putBoolean("sharedServiceStatus", serviceStatus);
editor.commit();
}
答案 1 :(得分:0)
尝试下面的MapActivity代码
@Override
public void onBackPressed() {
//super.onBackPressed();
markerMap.clear();
stopAlarm();
if (serviceStatus) {
SharedPreferences prefs = PreferenceManager
.getDefaultSharedPreferences(this);
SharedPreferences.Editor editor = prefs.edit();
editor.putBoolean("sharedServiceStatus", serviceStatus);
editor.commit();
}
super.onBackPressed();
}
super.onBackPressed();
之后的代码将无法执行我认为..