Меню опций сохранения Общие настройки - PullRequest
0 голосов
/ 21 января 2011

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

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

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

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;
}

1 Ответ

0 голосов
/ 21 января 2011

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

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

...