개발 - 안드로이드 12

안드로이드 fragment에서 editText.requestFocus() 안되는 경우

안드로이드에서 editText.requestFocus()는 커서를 입력 필드에 포커싱 하는 메소드 입니다. 그런데 이것이 경우에 따라서 될 때가 있고, 안될 때가 있습니다. 아래 코드는 처음은 되는데, 두번째 부터 안되었습니다. public class TalkWriteFragment extends Fragment { @Override public View onCreateView(@NonNull LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) { ViewGroup rootView = (ViewGroup) inflater.inflate(R.layout.fragment3_talk_write, ..

안드로이드 listView notifyDataSetChanged 0 → 1 신규 추가시는 동작 안함 해결

안드로이드 listView에서 데이타셋이 변경되는 경우 adapter.notifyDataSetChanged()를 호출하면 자동으로 화면이 갱신됩니다. 그런데 안되는 케이스가 있습니다. 초기 데이타셋이 0건에서 신규 추가 변경되는 경우는 adapter.notifyDataSetChanged()이 동작하지 않습니다. adapter.notifyDataSetChanged() 메소드를 찾아보면 이렇게 생겼습니다. mObservers.size() 이 0인 경우는 for 문을 타지 않습니다. public void notifyChanged() { synchronized(mObservers) { // since onChanged() is implemented by the app, it could do anything, i..

안드로이드 ListView 멀티 아이템

안드로이드 ListView에서 여러 종류의 아이템을 출력하는 방법입니다. 처음에는 ListView를 3개 만들어서 처리하려고 했는데, 스크롤시 전체가 움직이지 않고 하나만 움직여서 문제가 되었습니다. 이런 경우 ListView 멀티 아이템을 사용해야 합니다. 타입 종류 위 그림을 보면 아이템 타입은 3개가 존재 합니다. 1. 타이틀 2. 구분선 3. 사용자 정보 먼저 3개의 layout.xml을 먼저 만들어 줍니다. 타입 1 : item_title.xml 타입2 : item_line.xml 타입3 : item_user.xml . . . . . . MultiUserItem.java 3가지 타입을 처리할 수 있는 Item 클래스를 만들어 줍니다. 각 타입을 구분할 수 있는 type 변수가 있어야 하고, 각 ..

안드로이드 raw 이미지 Uri 얻어오기

피카소 라이브러리에서 raw 이미지를 처리하려고 했는데, drawable 이미지는 되는데 raw는 지원 되지 않았습니다. 이것저것 해본 결과 raw를 drawable로 캐스팅해서 처리하는 방법은 Suppress annotation 추가해서 하는 방법밖에는 없더라고요. 개인적으로 Suppress annotation 은 찜찜하기도 하고, 버그를 유발할 것 같아서 사용을 안하는 편입니다. 다른 방법으로 raw 이미지의 Uri를 얻어와서 처리 하였습니다. // raw 이미지 URI Uri uri = new Uri.Builder() .scheme(ContentResolver.SCHEME_ANDROID_RESOURCE) .authority(context.getResources().getResourcePackageN..

안드로이드 ListView에 ImageView 이미지 넣기

안드로이드 리스트 뷰에 이미지를 넣는 방법 입니다. 처음에는 Adaptor의 getView 메소드에서 쓰레드로 비동기 처리하려고 했는데 에러가 나서 잘 되지 않았습니다. 리스트의 이미지가 빠지기도 하고, 스크롤 하면 에러나기도 하고 정확하게 왜 안되는지는 모르겠습니다. 피카소 라이브러리 검색해보니 피카소 라이브러리를 사용하면 다운로딩, 캐싱, 메모리 관리 등 어려운 것을 자동으로 처리 해준다고 합니다. build.gradle 기존 파일에서 라이브러리를 추가 합니다. implementation 'com.squareup.picasso:picasso:2.8' UserAdapter.java getView 메소드에서 사진 부분을 피카소 라이브러리를 사용해서 처리 @Override public View getVie..

안드로이드 Notification 클릭시 Fragment 이동

안드로이드에서 FCM Notification을 클릭시 특정 Fragment로 이동하는 방법입니다. 검색해서 알려진 방법으로 Fragment 이동은 되나 MainActivity가 여러개 생겨서 문제가 생기는데 이를 해결하였습니다. AndroidAManifest.xml 우선은 MainActivity가 여러개 생기지 않게 singleTask 설정합니다. FCMService.java FCM 수신시 Notification 알림 부분 입니다. Intent에 이동할 fragment가 fragment2로 이동한다고 데이타를 넣어 줍니다. 이는 MainActivity의 onCreate와 onNewIntent에서 처리 됩니다. // Notification 알림 Intent intent = new Intent(this, M..

안드로이드 TabLayout 서브페이지에서 서브페이지 이동시 Tab 인덱스 변경 방법

서브 페이지(fragment) → 서브 페이지(fragment) 이동 1-1 Fragment에서 2-1 Fragment 이동은 어렵지 않게 할 수 있습니다. 그런데 문제는 상단의 탭이 변경되지 않습니다. 검색해 보면 나오는 상단의 탭을 변경하는 방법은 이벤트 리스너 호출해서 변경하는 방식이라 문제가 됩니다. 예) tabLayout.getTabAt(1).select(); 해결 방법 상단 탭만 변경은 이렇게 하면 가능 합니다. 깔끔하지는 않은데 더 좋은 방법 있으면 댓글 남겨 주세요. tabLayout.addOnTabSelectedListener(new TabLayout.OnTabSelectedListener() { // 탭 메뉴 선택 @Override public void onTabSelected(TabL..

안드로이드 FCM 스프링 서버에서 특정 사용자에게 notification 예제 #03

FCM admin SDK를 사용해서 스프링에서 notification 메시지를 특정 사용자에게 보내는 방법입니다. admin SDK 특정 사용자에게 notification pom.xml 기존 파일에서 maven dependency를 추가 합니다. com.googlecode.json-simple json-simple 1.1.1 com.google.api-client google-api-client 1.26.0 com.google.oauth-client google-oauth-client 1.26.0 com.google.http-client google-http-client 1.26.0 com.google.http-client google-http-client-jackson2 1.26.0 com.google..

안드로이드 FCM 포그라운드 전체 사용자 notification 예제 #02

앱이 포그라운드 상태에서도(백그라운드 + 포그라운드) FCM notification 알림을 받을 수 있는 방법입니다. 포그라운드 전체 사용자 notification 두번째 예제는 FCM으로 포그라운드 notification을 전체 사용자에게 보내는 방법입니다. 앱 내부에서 FCM notification 처리가 될 수 있도록 onMessageReceived 메소드를 추가해 보겠습니다. 이전 내용 포함해서 전체로 올립니다. build.gradle (Project) 기존 파일에서 plugin 추가 plugins { id 'com.google.gms.google-services' version '4.3.15' apply false } build.gradle(Module:app) 기존 파일에서 plugin과 de..