PreeferenceScreen 5

안드로이드 preference persisit 의 비밀 한가지

preference에서 getPersistedString 으로 저장된 값을 가져오고 있었는데 이 값을 String에서 Int로 바꾸었다. 그리고 이젠 getPersistedInt 요렇게 값을 가져 오도록 한 뒤 실행을 했더니... 저승사자가 또 와버렸다. 안드로이드 초보인 코모에겐 아직도 까만 화면의 팝업이 너무 두렵다. 그리고 희한 하게도 이상한 에러로 죽으니 참으로 입이 타들어 간다. Caused by: java.lang.ClassCastException: java.lang.String cannot be cast to java.lang.Integer 분명 int로 바꾸면서 int 변수에 넣어 줬는데 도데체 이게 무슨 귀신이 신나서? 까까불어 먹고 있는 소리인가... int a - getPersiste..

SwitchPreference 이벤트 중복 버그

CheckboxPreference를 사용 할 때는 분명히 onPreferenceTreeClick으로 이벤트가 들어왔다. 하지만 SwitchPreference를 사용하면 onPreferenceChange로 이벤트가 들어오니 주의 하여야 한다. onPreferenceTreeClick if (KEY_SETTINGS.equals(preference.getKey())) { ..... return true; } 그러나, 더 심각한 문제는... 스위치를 끄고 켤 때 마다 이벤트가 2번씩 들어 온다는 것이다. 이를 해결 하기 위해서는 아래처럼 새 이벤트 헌 이벤트를 검사해주어야 한다. 이것이 더 웃긴 것이 단말기 마다 다르다는 점이다. 어떤 단말기는 2번 이벤트를 1번으로 줄여서 보내주고 어떤 단말기는 2번 다 보내니..

안드로이드에서 Super를 쓰지 않으면? Wrong state class -- expecting Preference State

갑자기 아래와 같은 에러가 뜬다면,java.lang.IllegalArgumentException: Wrong state class -- expecting Preference State 아무리... 코드를 봐도... 구글링을 해봐도.... 나에게 맞는 처방전을 쉽게 찾기가 거의 불가능에 가깝다.... 원인 조차도..... 1. preference XML 에 같은 ID를 쓰는 놈이 있는지 찾아본다.2. 동적 코드에서도 같은 ID를 쓰는 놈이 있는지 찾아본다. 여기까지 해서 해결이 안되면,3. onResume() 을 체크 해본다.4. 되도록 onResume()에서 refresh()를 구현 해준다. --> final ListPreference key = (ListPreference) findPreference(..

안드로이드 앱에 Admob 광고 달기 -Preference Style

안드로이드 일반 액티비티라면 애드몹(Admob)광고는 간단히 xml 형식만 지켜주면 달수 있다. 하지만 UI 가 Preference Style (Preference, PreferenceScreen, PreferenceFagment)이라면 얘기가 달라진다. 그냥 붙여서는 절대 안된다. 가정A 는 PreeferenceScreen XMLB 는 Activity 이 경우 A에 애드몹 설정을 넣고 B의 OnCreate에서 그냥 부르면 죽는다. Preference Style의 UI는 기본적으로 클래스를 새로 만들어서 Overide 해줘야 모양도 바꿀 수 있고, 기능도 넣을 수 있기 때문이다. 그럼 결론만 보자. 1. A (PreferenceScreen XML) 3. D (Preference Class) AdmobPr..