2011-11-13 2 views
0

여기 내 문제가 있습니다. 스피너가 있고 모든 옵션이 스피너에서 일부 옵션을 선택하면 문제가되지 않습니다. 스피너에서 모든 옵션을 내 레이아웃 (위치 명령에서 볼 수있는 스피너의 옵션)에서 편집해야합니다. 그래서 SharedPreferences로 만들었습니다. textview가 변경되었지만 앱을 종료하고 다시 열면 textview가 기본값 (내 레이아웃에 정의 된 것과 동일)입니다. 그렇다면 문제는 어디에 있습니까?어떻게 SavePreferences로 TextView를 변경 했습니까?

첫 번째 활동 :

if(position == 4){ 
    SharedPreferences myPrefsUv = CPUActivity.this.getSharedPreferences("myPrefsUv", MODE_PRIVATE); 
    SharedPreferences.Editor prefsEditorUv = myPrefsUv.edit(); 
    prefsEditorUv.putString(maxUv, "1"); 
    prefsEditorUv.commit(); 
} 

if(position == 5){ 
    SharedPreferences myPrefsUv = CPUActivity.this.getSharedPreferences("myPrefsUv", MODE_PRIVATE); 
    SharedPreferences.Editor prefsEditorUv = myPrefsUv.edit(); 
    prefsEditorUv.putString(maxUv, "2"); 
    prefsEditorUv.commit(); 
} 

if(position == 6){ 
    SharedPreferences myPrefsUv = CPUActivity.this.getSharedPreferences("myPrefsUv", MODE_PRIVATE); 
    SharedPreferences.Editor prefsEditorUv = myPrefsUv.edit(); 
    prefsEditorUv.putString(maxUv, "3"); 
    prefsEditorUv.commit(); 
} 

if(position == 7){ 
    SharedPreferences myPrefsUv = CPUActivity.this.getSharedPreferences("myPrefsUv", MODE_PRIVATE); 
    SharedPreferences.Editor prefsEditorUv = myPrefsUv.edit(); 
    prefsEditorUv.putString(maxUv, "4"); 
    prefsEditorUv.commit(); 
} 

두 번째 활동 :

@Override 
    public void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.my_layout); 

     SharedPreferences myPrefsUv = UVActivity.this.getSharedPreferences("myPrefsUv", MODE_PRIVATE); 
     String prefNameUv = myPrefsUv.getString(maxUv, ""); 
     if(prefNameUv == "1"){ 
      final TextView textUv = (TextView)findViewById(R.id.text_max); 
      textUv.setText("100"); 
     } 
     if(prefNameUv == "2"){ 
      final TextView textUv = (TextView)findViewById(R.id.text_max); 
      textUv.setText("110"); 
     } 
     if(prefNameUv == "3"){ 
      final TextView textUv = (TextView)findViewById(R.id.text_max); 
      textUv.setText("120"); 
     } 
     if(prefNameUv == "4"){ 
      final TextView textUv = (TextView)findViewById(R.id.text_max); 
      textUv.setText("130"); 
     } 
    } 

감사합니다.

+0

이 질문은 매우 명확하지 않다 다음 ...

먼저 활동을 사용합니다. 느슨한 연설을 개선하는 것 외에도 1) 현재 결과/텍스트, 2) 예상 결과를 제공해야합니다. – davidcesarino

+0

수정 됨. 나는 그것이 도움이되기를 바랍니다. – Adam

답변

2

동일한 키를 사용하여 다른 값을 추가하고 있습니까? 이 방법은 항상 첫 번째 경기를 반환합니다 생각합니다. 다른 경우에 따라 다른 값이 할당되도록 코드 "maxUv"에 표시되지 않습니다.

1) if/else 구조로 이동하는 것이 좋습니다. 이런 식으로, 당신이 적절한 경우, 나머지 조건은 평가되지 않습니다.

2) if/else 구조 외부에서 다음 행을 호출하십시오. 모든 경우에 SharedPreferences Editor를 가져올 필요는 없습니다.

SharedPreferences myPrefsUv = CPUActivity.this.getSharedPreferences("myPrefsUv", MODE_PRIVATE); 
SharedPreferences.Editor prefsEditorUv = myPrefsUv.edit(); 

두 번째 활동에서 TextView textUv을 획득하는 경우와 동일합니다. 한 번 참조를 얻고 모든 경우에 동일한 참조를 사용하십시오.

3) 두 번째 활동에서는 문자열을 == 연산자로 비교하지만 문자열은 equals()과 비교해야합니다.

+0

물론, 나는 그것이 과로 때문에주의하지 않았다. 그래서 내 코드를 편집했지만 여전히 솔루션이 아닙니다. 내 앱을 죽인 다음 SharedPreferences를 다시 삭제하면됩니다. 어떤 해결책? – Adam

+0

수정 된 답변 읽기. 특히 3) – hovanessyan

+0

당신은 저를 때려 눕 힙니다. 그래서 나는 일반적으로 이른 아침에 질문에 답하지 않습니다! :-) – davidcesarino

0

다른 사람이 저를 때렸습니다. 늙은 사람들은 같아.

"=="를 사용하여 문자열을 비교하고 있습니다. 당신은 .equals를 사용하여 비교해야한다 :

if(prefNameUv.equals("1")) 

이 필요한 것입니다.

게다가 환경 설정 파일을 선언하지 마십시오. 귀하의 경우에는 필요하지 않으므로 더 복잡하게 만들 필요가 없습니다.

SharedPreferences myPrefsUv = PreferenceManager.getDefaultSharedPreferences(CPUActivity.this); 

두 번째 활동 :

SharedPreferences myPrefsUv = PreferenceManager.getDefaultSharedPreferences(UVActivity.this); 
+0

두 액티비티에서 변수를 만들고 작동하는지 확인하십시오. 다음 번에 if 블록에서 "else"를 사용하십시오. – davidcesarino

+0

예, 제가 말했듯이 문제는 단지 평등 한 문제였습니다. – Adam

관련 문제