[안드로이드 공부] 203

안드로이드 툴바 우측 서랍 아이콘 만들기

안드로이드 액션바 우측에 원하는 이미지로 메뉴를 만들어 보자. 상위 버전의 경우 기본적으로 만들어지지만, 하위 버전의 경우에는 하나 하나 해줘야만 한다. 애플은 OS 버전이 올라가면 참 난감하게도 예전 API를 통보도 없이 없애 버리지만, 아직 구글은 친절하게 하위 버전에서도 사용 할 수 있도록 많은 지원을 아끼지 않고 있다. 1. 우선 툴바를 만들고2. 툴바에 메뉴를 붙이고3. 메뉴에 붙을 이미지를 Drawable로 만든다.4. 만든 drawable을 툴바에 붙인다. toolbar.setOverflowIcon(drawable); Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar); toolbar.setTitle(""); toolbar.addView(cust..

안드로이드 비동기 태스크 the task has already been executed

안드로이드에서는 비동기적으로 UI 작업을 처리 할 수있도록 asyncTask라는 놈을 제공한다. 하지만, 여러모로 까탈스러운 점이 많으니 조심하자. mTask = new aTask(); if(mTask != null){ mTask.executeOnExecutor(AsyncTask.THREAD_POOL_EXECUTOR); } 소스를 보면 먼저 태스크를 생성하고 실행 한다. 그러나 만약, if(mTask == null) { mTask = new aTask(); mTask.executeOnExecutor(AsyncTask.THREAD_POOL_EXECUTOR); }else { mTask.executeOnExecutor(AsyncTask.THREAD_POOL_EXECUTOR); } 위와 같이 다시 생성 하지 않..

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

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

안드로이드 서비스 3단계 과정

안드로이드 서비스(service)를 시작하고, 동작하는지 확인하고 마지막으로 멈추는 간단한 3가지 과정. public static void startSensor(Context context) { if (Tools.isServiceRunning("com.comostudio.service.SensorService", context) == false) { context.startService(new Intent(context, SensorService.class)); } } public static void stopSensor(Context context) { if(Tools.isServiceRunning("com.comostudio.service.SensorService", context)){ context..

[안드로이드 스튜디오] 정말 쉬운 패키지명 변경 -단 2번만 클릭하면된다!

패키지명 변경 이젠 정말 간단하게 해보자! 1. androidmanifest.xml 에서 Rename Package to ios단축키가 안 먹힌다면 마우스 우측키를 누르고 리팩토링을 선택 한다 2. 왼쪽 Project 섹션의 Android에서 samsung폴더 클릭 후 Shift + F6 리팩토링 Rename Package to apple 결국 com.ios.apple로 변경됨 자, 얼마나 간단한가? 단 두 번만에 깔끔하게 완성이다! 위 처럼 하면com.a.b 에서 a만 변경하기가 정말 쉽다. 괜히 패키지 매니저로 들어가서 이것 저것 변경 하다가 완전히 지저분하게 망쳐 놓지 말자.

[안드로이드] 프래그먼트에서 뷰 제거 확실하게 하기 -You must call removeView()

Caused by: java.lang.IllegalStateException: The specified child already has a parent. You must call removeView() on the child's parent first. 뷰페이져에 달린 얘들에서 디스트로이 뷰 하면서 제거 해줘야 한다. @Override public void onDestroyView() { super.onDestroyView(); if(mRootView !=null){ ViewGroup parentViewGroup = (ViewGroup) mRootView.getParent(); if( null != parentViewGroup ) { parentViewGroup.removeView( mRootView )..

[안드로이드] 프래그먼트 안정화 시키기

프래그먼트는 액티비티 아빠에게 소속되어있다가 아빠가 잠시 한 눈을 팔 때 붙었다 떨어졌다 하면서 실종되는 문제를 가지고 있다. 즉, 이런 문제 때문에 isAdded를 사용하면 붙어 있나 없나를 알아 낼 수 있지만.. 이건 그냥 임시 방편일 뿐이다. isAdded()를 쓰면 그냥 피해가지만..... 이건 너무 많은 비용이 든다.... 처리 못하는게 너무 많아 진다.... can not resolve android.support.v4.app.FragmentManager.--> getSupportFragmentManager() in your code, not getFragmentManager() You must call removeView() on the child's parent first" 프래그먼트에서 ..

[안드로이드] 미디어플레이어 에러 대처하기 (-38, -19)

error (-38, 0) 미디어 플레이어가 준비 되지 않았는데 시작 하게 되면 발생하는 에러다.즉, 준비 리스너를 달고 난 뒤 준비가 끝났다는 이벤트가 오면 시작 시키도록 하자. mPlayer.prepareAsync(); mPlayer.setOnPreparedListener(new MediaPlayer.OnPreparedListener() { public void onPrepared(MediaPlayer mp) { mp.start(); } }); 그러나,위와 같이 하면 또.. -38이 날 확률이 높다. mPlayer.prepareAsync(); 아래와 같이 코드를 리스너 밑으로 달자. 그래야 확실하게... 준비 된 사수로 부터 발사를 할 수 있다..... mPlayer.setOnPreparedListe..

[안드로이드] AsyncTask를 연속으로 사용할 때 문제점

asyncTask를 연속으로 사용할 때 어떤 문제점이 발생 할까? 1. 만약, 1개의 비동기 태스크를 사용한다고 가정 하자.2. 비동기 태스크가 사용자에 의해 계속 호출 된다고 하자.3. 비동기 태스크는 할 일을 다하고 onPost에서 마지막 할일을 마쳐 준다.4. 무슨 문제가 있나? 5. 원래 비동기 태스크의 결과는 항상 onPost에서 얻어오기를 희망 한다. 6. 하지만... 연속으로 비동기태스크를 돌리게 되면 섞이는 경우가 발생한다.7. A가 처음 태스크, B를 두 번째 태스크라고 하자.8. A가 돌고 있는데 B를 실행 했다. 9. A의 onPost가 실행되고 A는 마무리 짓는다. 이것이 정상이다. 하지만10. B가 실행되면서 A의 onPost 이전에 실행 된다. 즉, 끼어든다.11. 하지만.. A..