Сохранение общих настроек меню параметров

У меня есть меню опций. Когда активность теряет фокус, выбранные пункты меню опций сохраняют состояние, но когда моя активность уничтожается, все опции сбрасываются.

Как я могу сохранить состояние выбранного предпочтения после возобновления работы из разрушенного состояния? Проблемы с визуализацией реализации Shared Preferences для кода. .

(Требуется только для логических значений, но я включил статические пункты меню.)

public final static int MENU_SOMETHING_MODE_ON = 1;
public final static int MENU_SOMETHING_MODE_OFF = 2;
public final static int MENU_FULLSCREEN_ON = 3;
public final static int MENU_FULLSCREEN_OFF = 4;
public final static int MENU_SOUND_ON = 5;
public final static int MENU_SOUND_OFF = 6;
public final static int MENU_FASTER = 7;
public final static int MENU_SLOWER = 8;
public final static int MENU_SOMETHING = 9;
public final static int MENU_EXTRAS = 10;

private static boolean soundOn = true;
private static boolean mFaster = true;

private boolean fullscreen = true;

@Override
public boolean onCreateOptionsMenu(Menu menu)
{
    super.onCreateOptionsMenu(menu);
    menu.add(0, MENU_SOMETHING, 0, R.string.menu_new_something);
    menu.add(0, MENU_SOMETHING_MODE_ON, 0,
             R.string.menu_something_on);
    menu.add(0, MENU_SOMETHING_MODE_OFF, 0,
             R.string.menu_something_off);
    menu.add(0, MENU_FULLSCREEN_ON, 0, R.string.menu_fullscreen_on);
    menu.add(0, MENU_FULLSCREEN_OFF, 0, R.string.menu_fullscreen_off);
    menu.add(0, MENU_SOUND_ON, 0, R.string.menu_sound_on);
    menu.add(0, MENU_SOUND_OFF, 0, R.string.menu_sound_off);
    menu.add(0, MENU_FASTER, 0, R.string.menu_faster);
    menu.add(0, MENU_SLOWER, 0, R.string.menu_slower);
    menu.add(0, MENU_EXTRAS, 0, R.string.menu_extras);
    return true;
}

@Override
public boolean onPrepareOptionsMenu(Menu menu)
{
    super.onPrepareOptionsMenu(menu);
    menu.findItem(MENU_SOUND_ON).setVisible(!getSoundOn());
    menu.findItem(MENU_SOUND_OFF).setVisible(getSoundOn());
    menu.findItem(MENU_SOMETHING_ON).setVisible(
        getMode() == SOMETHING_NORMAL);
    menu.findItem(MENU_SOMETHING_OFF).setVisible(
        getMode() != SOMETHING_NORMAL);
    menu.findItem(MENU_FULLSCREEN_ON).setVisible(!fullscreen);
    menu.findItem(MENU_FULLSCREEN_OFF).setVisible(fullscreen);
    menu.findItem(MENU_FASTER).setVisible(getFaster());
    menu.findItem(MENU_SLOWER).setVisible(!getFaster());
    return true;
}


@Override
public boolean onOptionsItemSelected(MenuItem item)
{
    switch (item.getItemId()) {
    case MENU_SOMETHING:

     AlertDialog.Builder alt_bld = new AlertDialog.Builder(this);   

     alt_bld.setMessage("Are you sure?")
     .setCancelable(false)
     .setPositiveButton("Yes", new DialogInterface.OnClickListener() {
             public void onClick(DialogInterface dialog, int id) {
                 //  Action for 'YES' Button
                 something.new();
             }
      })
     .setNegativeButton("No", new DialogInterface.OnClickListener() {
             public void onClick(DialogInterface dialog, int id) {
                 //  Action for 'NO' Button
                 dialog.cancel();
             }
      });
      AlertDialog alert = alt_bld.create();
      // Title for AlertDialog
      alert.setTitle("Something");
      // Icon for AlertDialog
      alert.setIcon(R.drawable.dialog);
      alert.show();


      return true;
    case MENU_SOMETHING_ON:
      setMode(THIS_SOMETHING);
      return true;
    case MENU_SOMETHING_OFF:
      setMode(THIS_NORMAL);
      return true;
    case MENU_FULLSCREEN_ON:
      fullscreen = true;
      setFullscreen();
      return true;
    case MENU_FULLSCREEN_OFF:
      fullscreen = false;
      setFullscreen();
      return true;
    case MENU_SOUND_ON:
      setSoundOn(true);
      return true;
    case MENU_SOUND_OFF:
      setSoundOn(false);
      return true;
    case MENU_FASTER:
      setFaster(false);
      return true;
    case MENU_SLOWER:
      setSlower(true);
      return true;
    case MENU_EXTRAS:
      startExtras();
      return true;
    }
    return false;
}

private void setFullscreen()
{
    if (fullscreen) {
      getWindow().addFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN);
      getWindow().clearFlags(
          WindowManager.LayoutParams.FLAG_FORCE_NOT_FULLSCREEN);
    } else {
      getWindow().clearFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN);
      getWindow().addFlags(
          WindowManager.LayoutParams.FLAG_FORCE_NOT_FULLSCREEN);
    }
    mView.requestLayout();
}

public synchronized static void setMode(int newMode)
{
    Mode = newMode;
}

public synchronized static int getMode()
{
    return Mode;
}

public synchronized static boolean getSoundOn()
{
    return soundOn;
}

public synchronized static void setSoundOn(boolean so)
{
    soundOn = so;
}

public synchronized static boolean getFaster()
{
    return Faster;
}

public synchronized static void setFaster(boolean dont)
{
    Faster = dont;
}

person user583922    schedule 21.01.2011    source источник


Ответы (1)


Это фантастическое руководство о том, как создать действие с настройками, а также как получить/установить эти настройки. . Он также покажет вам, как использовать общие настройки, если вы решите не реализовывать действие настройки.

Почти все пользователи знакомы с действием предпочтений, потому что именно так они настраивают параметры на своем телефоне.

Хотя это не единственный способ реализации «опций» или, возможно, даже не лучший способ, он отлично работает, обладает огромной гибкостью, прост и быстр в реализации.

person user432209    schedule 21.01.2011
comment
Спасибо за полезный ответ, но я бы предпочел сохранить меню параметров в текущей структуре кода. - person user583922; 21.01.2011
comment
Ссылка не работает, это еще одна причина, по которой я размещаю ссылку в качестве ответа - не очень хорошая идея. - person lostintranslation; 02.07.2014