프리퍼런스 11

[안드로이드] layoutInflater 성능 올리기

XML을 코드에서 가져와서 사용 할 경우, layoutInflater.inflate 방법을 사용한다.하지만, 이 놈을 사용 하는 만큼 뷰를 계속 불러 온다. 10개의 뷰가 있는데 layoutInflater.inflate 코드가 실행 되면 getView를 통해 뷰를 하나씩 10번 불러 온다. 얼마나 낭비인가?그럼 어떻게? 간단하다. 이 놈을 사용 하게 될 경우 view가 null인지를 체크 한 뒤 사용 하면 된다. 원래 getView에 convertView가 있는데 public View getView(View convertView, ViewGroup parent) { if (convertView == null) { convertView = onCreateView(parent); } onBindView(co..

[안드로이드] java.lang.IllegalStateException: Cannot execute task: the task is already running.

AsyncTaks를 아래 방법으로 호출 하면 두 번 실행 하게 되는 효과를 발휘 한다. aAsyncTask.executeOnExecutor(AsyncTask.THREAD_POOL_EXECUTOR).executor(params); java.lang.IllegalStateException: Cannot execute task: the task is already running. aAsyncTask.executeOnExecutor(AsyncTask.THREAD_POOL_EXECUTOR, params) 요렇게 바꿔 줘야 한다.

[안드로이드] 스트링으로 동적 값 적용하기

string.xml에 아래와 같이 작성을 하면, 동적인 값을 보여 주는 스트링을 만들 수 있다. 매번 스트링을 만드는 수고를 덜 수 있다. string파일 예) 08:%02d분, 09:%02d분, 10:%02d분 2%d는 두 자리수로 표기, 02%d는 01, 02, 03 처럼 표기 한다. 코드getString(R.string.test, Integer.parseInt(tempMinute), Integer.parseInt(tempMinute), Integer.parseInt(tempMinute));

[안드로이드] 프리퍼런스가 업데이트 안된다면?

말그대로 프리퍼런스(preference) summary가 없데이트 안 될 경우에는 어떻게 하느냐? 다른 화면을 갔다 올 경우에는 비교적 summary가 업데이트 잘 되지만, 한 화면에서 바로 바로 수정이 필요 할 경우에는 쉽지 않다. 만약, 잘 되다가 destory를 한 뒤 다시 들어 왔는데 이 때 부터 작동이 안된다면 ? 이전 글(BadTokenException)과 같은 내용의 해결 방법을 사용하면 된다. Preference를 static으로 만들어서 setSummary를 하면 된다. 어디서? onPreferenceChange(Preference pref, Object newValue) { 에서 받아온 pref로 pref.setSummary() 하지 말고 전역으로 선언해 놓고 하면 된다. 즉, publ..

[안드로이드] BadTokenException -is your activity running? 프리퍼런스에서 발생한다면?

이 에러는 참으로 갑자기 불쑥 나오기로 유명하다. 액티비티 종료 중에 컨텍스트를 사용하다가 잘 발생한다. android.view.WindowManager$BadTokenException: Unable to add window -- token android.os.BinderProxy@40b47bd8 is not valid; is your activity running? 1. 그래서 액티비티 종료 후에도 핸들러가 돌아 갈수도 있기에 갑자기 다이얼로그를 띄우는 등의 행동은 하지 말아야 할 것이다. 이럴때는 isFinishing()을 사용해서 예방 할 수 있다. 2. 또는 다른 액티비티와 연계되어서 발생 할 경우에는 getContext(), this.activity가 아닌 getParent()를 사용 하면 해결..

CheckBoxPreference - check상태에 따라 활성, 비활성 바뀌게 하기

활성상태일때만 설정을 가능하게 하고픈 메뉴가 있을 것이다.체크박스프리퍼런스를 사용하고 있다면,이럴때 유용한 field가 android:dependency 이다. android:dependency 자리에 CheckBoxPreference의 key값을 넣어주면 별도 .java 코딩없이 xml파일 만으로도 아래와 같은 결과를 얻을 수 있다. [그림]정각알림 사용하기 설정이 check되지 않았을 때는 분 설정하기 메뉴가 비활성화되고,check되었을 때에는 분 설정하기 메뉴가 활성화 된다. -> [소스]

안드로이드 프리퍼런스 보이기 안보이기

PreferenceScreen은 xml에서 gone을 해도 보인다. 그럼 소스코드에서 변경해야 하는데 일반적인 방법으로 해서는 되지 않는다. PreviewPreference mCheckBoxPref = (PreviewPreference) findPreference(KEY_SETTINGS); PreferenceCategory mCategory = (PreferenceCategory) findPreference("key_PreferenceCategory"); mCategory.removePreference(mCheckBoxPref); 프리퍼런스를 카테고리에 추가하고 카테고리에 있는 프리퍼런스를 보이지 않게 만들면 된다.

당신은 반드시 아이의 부모를 먼저 제거 해야 합니다?

오버라이드를 하다 보면... 또는 여러가지 뷰 작업등을 하다 보면 저런 경고 아니... 죽여 놓고 내 뱉는 문장을 만나게 된다. 유아이가 정말 복잡하게 되어있자면... 정말 난감하기 따름이 없을 것이다. 이번엔 Preference Override 에서 발생하는 문구에 대해 보겠다. 그냥 답만 내 놓자. onCreateView를 통해 1개만 만든다면 문제 없지만, 여기에다가 onCreateDialogView까지 만들게 되면 다음에 뷰를 띄울 때는 반드시 죽여야 한다. 그러지 않으면 아래 뻘건 문구와 함께 앱이 죽어 있을 것이다. java.lang.IllegalStateException: The specified child already has a parent. You must call removeView(..

Preference dialog 수동으로 띄우기

Preference Dailog 즉, listprefernce, dialogpreference, muliselectelistpreference등은 기본적으로 Preference Screen에서 선택하면 뜨도록 되어있다. 하지만, 수동으로 띄워야 할 경우도 생긴다. 방법은 생각보다 간단하지만, 이 방법을 생각 해내기 까지는 쉽지 않다. ((MyDialogPreference) findPreference(KEY_DIALOG)).show(); public void show() { showDialog(null); } 1. 다이얼로그를 띄울 곳에서 .show를 해주고,2. Preference에 가서 show 메서드를 만들어 주면 된다.