본문 바로가기

전체 글29

[TIL] DialogFragment 삽질 기록 오늘 하루종일 삽질했던 dialogFrament에 대해서 기록을 남겨놓으려고 한다. 다음번에는 똑같은 문제로 시간을 허비하지 않기 위해서.. 일단 다른 방법으로 해결은 했지만 아직 원래 방법으로 했을 때 에러가 난 이유에 대해서는 파악하지 못했다. 내가 겪은 문제는 오픈 api에서 받아온 데이터를 recyclerView로 보여줄 때 무한스크롤 시 생기는 로딩 시간에 띄워줄 Dialog Fragment가 처음에는 제대로 show가 되고 dismiss가 되지만 다시 해당 프래그먼트를 띄워줄 때 앱이 crash 되는 현상이었다. private val loadingDialogFragment by lazy { LoadingDialogFragment() } private var isLoading = false //.. 2024. 2. 22.
Android에서 카카오 지도 API 사용하기 이번 프로젝트에서 지도를 이용해서 앱을 만들어 보기로 결정을 해서 일단 Google, Naver, KAKAO의 지도 API중 어떤거를 사용해야 할지 고민을 하다가 국내 지도만 사용할 계획이기 때문에 Naver, KAKAO 두개로 추려서 고민을 하다가 추후에 소셜에 관한 기능을 추가 한다고 했을 때 KAKAO가 좀 더 해당 부분에 있어서 많은 기능을 제공한다고 생각이 되어서 KAKAO API로 결정했다. 2024. 2. 20.
[TIL]안드로이드 바텀네비게이션 뱃지 달기 이미지 검색 앱 과제를 하던 중에 좋아요를 누르면 보관함으로 옮기고 해당 사실을 사용자에게 좀 더 직관적으로 보여줄 수 있는 방법이 없을까 생각하다가 마침 카카오톡에 있는 하단에 배지를 통한 알람이 생각이 나서 직접 구현을 해보려고 했다. 나는 Android의 Material Design 라이브러리에서 제공하는BadgeDrawable을 사용하여 바텀 내비게이션뷰의 보관함 아이콘 위에 "NEW"라는 키워드를 가진 알람 배지를 띄워주도록 구현했다. // badgeDrawable을 바텀네비게이션바의 보관함 아이콘 위에 생성 private val storageBadge: BadgeDrawable by lazy { binding.navView.getOrCreateBadge(R.id.navigation_storag.. 2024. 2. 2.
[TIL] Application Context 사용해보기 SharedPreference를 사용해 보면서 SharedPreference를 앱 어느 곳에서나 Context의 제약 없이 SharedPreference에 쉽게 접근할 수 있도록 만들면 좋을 거 같다는 생각이 들었다. 그래서 찾다가 Application 클래스를 통해서 생성하는 방법이 있다는 것을 알게되었다. 일단 Application 클래스란 - Application 클래스는 Application을 상속받고 AndroidManifest.xml에 등록해야 한다. - 앱에서 단 하나의 Application 클래스만 등록할 수 있다. - 제일 먼저 인스턴스화되는 클래스이다 Manifest MyApp class MyApp: Application() { companion object { lateinit var .. 2024. 1. 31.
[TIL]Android Retofit Retrofit? 이란 간단하게 말해서 안드로이드와 서버간의 REST API 통신을 도와주는 라이브러리이다. 일단! REST API(REpresentational State Transfer)란 - 웹에서 서버와 클라이언트 간의 통신을 위한 표준 방법 - 웹에서 데이터를 주고받는 규칙을 정의 - 클라이언트는 서버에 정보를 요청하고, 서버는 그 정보를 제공 구성요소 - URL : 웹 상의 자원을 나타내는 URL 링크 - HTTP 동사: 수행하고자하는 행위 ( GET, POST, PUT, DELETE..) - 본문(Body): 생성 또는 업데이트하려는 리소스의 속성과 값이 포함된다. 이런 REST API 통신을 도와주는 HTTP 클라이언트 라이브러리가 Retrofit이다. Retrofit의 특징 - 간결한 코.. 2024. 1. 25.
[TIL]Shared Preference 사용해보기 Shared Prefernce란 쉽게 말하면 데이터를 저장하는 안드로이드 API다. 앱 개발을 하다보면 앱의 데이터들을 저장해서 관리해야하는 경우가 생긴다. 보통 DB를 사용하지만, 간단한 값을 저장하기에 DB를 설계하고 사용하는것은 부담스럽기 때문에 이럴 경우에는 Shared Preference를 사용한다. Shared Preference의 특징 - 값을 XML포맷의 텍스트 파일에 key-value 형식으로 저장한다. - primitive 타입을 가진 데이터만 저장 가능하다 - 보통의 경우 자동로그인 여부나 프로그램의 설정 정보(사용자의 옵션 선택 사항 등) 같은 가벼운 값을 저장할 때 사용한다. Shared Preference 프로젝트에 사용해보기 - Shared Preference 저장하는 부분 p.. 2024. 1. 25.
[TIL]ViewPager2의 아이템 정보 -> 프래그먼트 오늘은 삽질도 이런 삽질이 없을 만큼 장장 3시간 이상을 삽질한 기록을 남겨보려고 한다.. 마이페이지 구현 중에 뷰페이저의 아이템 정보를 프래그먼트에서 view에 세팅하기 위해서 시도를 했다. 일단 처음 가장 먼저 시도해본 방법은 리스너를 달아서 뷰페이저 아이템의 정보를 프래그먼트로 넘기는 방법이었다. 당연히 무조건 될 줄 알았다.. 여기서 3시간 이상을 삽질할 거라고는 생각하지 못했다.. 일단 가장 큰 문제는 listener를 호출하는 시점이였다. 위에 영상에서 보듯이 내가 원하는 시점은 탭 레이아웃으로 뷰페이저를 MY PAGE로 전환하는 그 시점이었다. 그래서 처음에는 아무 생각 없이 뷰가 그려지는 onBindViewHolder()안에서 리스너를 호출하면 되겠지라고 생각했다. // onBindView.. 2024. 1. 20.
[TIL]안드로이드 스튜디오 ViewPager2 + Indicator 오늘은 Viewpager2에 indicator를 연결해 보았습니다 indicator는 라이브러리를 여러 개 써본 뒤 제 기준 커스텀이 가장 쉬웠던 라이브러리를 선택하였습니다. 오늘의 결과 화면 일단 제가 사용한 Indicator 라이브러리입니다. https://github.com/tommybuonomo/dotsindicator GitHub - tommybuonomo/dotsindicator: Three material Dots Indicators for view pagers in Android ! Three material Dots Indicators for view pagers in Android ! - GitHub - tommybuonomo/dotsindicator: Three material Dot.. 2024. 1. 18.
안드로이드 스튜디오 ViewBinding View Binding은 안드로이드 아키텍쳐 구성요소 중 하나로 뷰와 상호작용 하는 코드를 쉽게 작성할 수 있게 해준다. 모듈에서 사용 설정된 뷰 결합은 모듈에 있는 각 XML레이아웃 파일의 결합 클래스를 생성한다. 나 같은 경우는 ViewBinding 을 뷰의 엘리먼트들을 findViewById보다 쉽게 참조 할 수 있는 방법이라고 이해하고 사용했다. 뷰바인딩 사용하기 build.gradle 설정하기 android { ... buildFeatures { viewBinding true } } 바인딩 클래스 이름 ex) xml 파일 이름 Binding 클래스 이름 activity.main.xml -> ActivityMainBinding fragment_home.xml -> FragmentHomeBindin.. 2024. 1. 17.
[TIL] 리사이클러뷰 ViewType 사용해보기 오늘은 리사이클러뷰를 씹고 뜯고 맛보기 위해서 MultiViewType 리사이클러뷰를 시도해보았다. 엄청 다양한 ViewType을 가진 리사이클러뷰는 아니고 간단한 Header를 가진 리사이클러뷰를 시도해보았다. 결과는.. java.lang.IndexOutOfBoundsException 에러가 떴다.. 오늘은 내가 어떻게 에러를 해결했는지 포스팅 해보려고 한다. 에러가 발생한 코드 override fun onBindViewHolder(holder: RecyclerView.ViewHolder, position: Int) { when(holder) { is HeaderViewHolder -> {} is ChatViewHolder -> { holder.bind(userList[position]) } } } 여.. 2024. 1. 10.