2017-12-26 14 views
0

안녕 얘들 아, 새해 복 많이 받으세요!setSingleChoiceItems 값이 작업 종료 후에 막대기가되지 않습니다.

수정이 불가능한 앱에 이상한 문제가 있습니다. 그것은 논리 오류가 있어야하지만, 어떻게 든 그것을 잡을 수 없어요.

여기에 문제는 내가 사전 설정 중 하나를 선택 후 응용 프로그램이 (MainActivity를 다시 시작하거나 살해됩니다) 멀티 태스킹에서 닫힐 때까지 선택이 붙어 있다는 것입니다 내 코드

public String[] str={"Disabled","Sound Quality Prefered","Bass Prefered","Battery Prefered",}; 
public int ThemePresetValue = 0; 
private int SelectedThemePresetValue = 0; 

    public void presets() { 
    AlertDialog.Builder alertDialog = new AlertDialog.Builder(this); 
    alertDialog.setTitle("Select Your Sound Preset"); 
    alertDialog.setNegativeButton("Cancel", null); 
    alertDialog.setPositiveButton("Select", themePresetDialogPositiveListener); 
    alertDialog.setSingleChoiceItems(str, ThemePresetValue, PresetListListener); 
    alertDialog.show();} 

DialogInterface.OnClickListener PresetListListener = 
     new DialogInterface.OnClickListener() { 

      @Override 
      public void onClick(DialogInterface dialog, int which) { 
       SelectedThemePresetValue = which; 
      } 
     }; 

DialogInterface.OnClickListener themePresetDialogPositiveListener = 
     new DialogInterface.OnClickListener() { 

      @Override 
      public void onClick(DialogInterface dialog, int which) { 
       mPreset = ""; 
       ThemePresetValue = SelectedThemePresetValue; 

       if (ThemePresetValue == 0) { 
        mPreset = "Disabled"; 
       } else if (ThemePresetValue == 1) { 
        mPreset = "Sound Quality Prefered"; 
       } else if (ThemePresetValue == 2) { 
        mPreset = "Bass Prefered"; 
       } else if (ThemePresetValue == 3) { 
        mPreset = "Battery Prefered"; 
       } 

       if (mPreset.equals("Disabled")) { 
        disabler(); 

       } else if (mPreset.equals("Sound Quality Prefered")) { 
        SoundQPreset(); 

       } else if (mPreset.equals("Bass Prefered")) { 
        bassPreset(); 

       } else if (mPreset.equals("Battery Prefered")) { 
        batteryPreset(); 
       } 
      } 
     }; 

입니다. 그런 다음 앱을 다시 열면 대화 상자의 선택이 0 ("사용 안 함")으로 다시 설정됩니다.

왜 이런 일이 발생합니까? 해결책이 있습니까?

답변

0

예, 해당 필드는 해당 객체마다 새로 만들어지며이 객체 (즉, 활동)가 파괴되므로 필드를 보유한 메모리도 해제됩니다. 그래서 필드의 수명은 객체의 수명에 달려 있습니다. 계속하려면 활동을 삭제하기 전에 SharedPreferences에 값을 저장하거나 일반적으로 일부 저장소에 값을 저장하는 것이 좋습니다. onPause()에 입력 한 다음 해당 환경 설정에서 onCreate() 또는 onResume() 콜백으로 가져옵니다. 예 :

/*--- Saving ---*/ 

SharedPreferences prefs = 
    getApplicationContext().getSharedPreferences(PREFERENCES_NAME, Context.MODE_PRIVATE); 
prefs.edit().putInt(KEY_NAME, VALUE).apply(); 


/*--- Retrieving ---*/ 

int oldValue = 
    getApplicationContext().getSharedPreferences(PREFERENCES_NAME, Context.MODE_PRIVATE) 
     .getInt(KEY_NAME, 0); 

PREFERENCES_NAME은 공유 환경 설정 파일의 파일 이름입니다. KEY_NAME은 저장된 값을 저장하고 나중에 검색하는 데 사용되는 키입니다. VALUE은 단순히 저장할 값입니다.

희망이 도움이됩니다.

+1

감사합니다. sharedPreferences (스위치로 이미 사용하고 있습니다)를 사용해야한다고 생각했지만 적절한 구현을 모르고있었습니다! – androidexpert35

+0

getapplicationContext에서 null pointerExcemption을 얻고 있습니다 ... – androidexpert35

+0

@ androidexpert35 Activity 또는 Context의 다른 하위 클래스에서 this를 호출해야합니다. – user8

1

사용자의 선택을 지속하지 않으므로 선택 사항은 작업이 완료 될 때까지 메모리에 남아 있습니다. 예를 들어 SharedPreferences 또는 sqlite를 사용하여 로컬에서 사용자의 선택을 저장해야합니다!

활동이 다시 시작되면 저장된 값을 읽고 선택한대로 옵션을 설정할 수 있습니다!