2011-01-21 8 views
0

옵션 메뉴가 있습니다. 활동이 포커스를 잃을 때 선택된 옵션 메뉴 항목은 상태를 유지하지만 내 활동이 파괴되면 모든 옵션이 재설정됩니다.옵션 저장 메뉴 공유 환경 설정

파괴 된 상태에서 재개 한 후 선택한 환경 설정의 상태를 저장하려면 어떻게해야합니까? 코드에 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; 
} 

답변

-1

This is a fantastic tutorial. 또한 기본 설정 작업을 구현하지 않을 경우 공유 환경 설정을 사용하는 방법을 보여줍니다.

대부분의 사용자는 휴대 전화에서 설정을 조정하는 방식이므로 기본 설정 활동에 익숙합니다.

"옵션"을 구현하는 유일한 방법은 아니지만 최선의 방법이 아닐지라도 뛰어난 유연성과 많은 유연성을 제공하며 구현이 간단합니다.

+0

유용한 답변 주셔서 감사하지만 현재 코드 프레임 워크에서 옵션 메뉴를 저장하는 것을 선호합니다. – user583922

+1

링크가 작동하지 않습니다. – DaveDev

+1

링크가 죽었습니다. 답변을 게시하는 또 다른 이유는 좋은 아이디어가 아닙니다. – lostintranslation

관련 문제