根据另一个活动中的值设置sharedPreferences中的默认值

时间:2015-10-23 10:12:56

标签: android sharedpreferences

我有两个活动(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();
    }

}

2 个答案:

答案 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();之后的代码将无法执行我认为..