안드로이드개발13 [Kotlin] ViewModel, Livedata 로 Fragment 끼리 통신하기 구현할 Fragment 및 화면 구조 내가 구성한 화면은 친구목록이라는 Fragment 안에 Tablayout 을 사용하고, 내부는 Viewpager2 를 이용해 찜한 친구와 지난 추천 친구라는 Fragment 를 배치한 구조이다. 친구목록[Fragment] 찜한 친구[Fragment] 지난 추천 친구[Fragment] 로 구성된 구조이다. 찜한 친구는 recyclerview 로 구현했는데, 친구를 삭제할 때마다 (adapter listener 를 통해) 친구 목록 Fragment 의 Tab text [ -> 찜한 친구(8) ]가 동적으로 변하는 것을 구현해야 했다. 원래 구현하려 했던 방법 (기본 방법) 찜한 친구 Fragment 에서 adapter listener 를 통해 친구목록에 변화가 감지되면,.. 안드로이드개발 2022. 1. 21. Kotlin) Failed to find GeneratedAppGlideModule Failed to find GeneratedAppGlideModule. You should include an annotationProcessor compile dependency on com.github.bumptech.glide:compiler in your application and a @GlideModule annotated AppGlideModule implementation or LibraryGlideModules will be silently ignored -> 이런 에러메시지가 떴다. 앱 실행에는 문제가 없으나 찝찝한 마음에 warning 을 해결하기 위해 찾은 방법. 1. Glide 에 대한 gradle 설정을 모두 추가해준다. // Glide implementation 'com.git.. 안드로이드개발 2022. 1. 20. git 오류 정리 C:\Users\qkrwl\AndroidStudioProjects\duos-android>git checkout main Already on 'main' Your branch is up to date with 'origin/main'. -> git checkout master 로 해결 가능. git checkout main error: Your local changes to the following files would be overwritten by checkout: -> 현재 branch 에서 add 와 commit 을 진행한 후 checkout 하면 해결 가능. git remote update // git remote 갱신하기 git branch -r // 원격 저장소의 브랜치 확인 git bran.. 안드로이드개발 2022. 1. 11. Navigation Graph 로 BottomBar 설정하기 navigation 을 이용해서 Bottom Navigation 의 fragment 들을 구성하는 방법이다. 먼저 menu 와 navigation 에 필요한 xml 들을 각각 생성해주었다. - Navigation xml 메뉴 선택시 이동할 Fragment 네 개를 생성하였다. - menu xml 메뉴의 item 4개를 생성하고 아이콘, title 으로 구성하였다. 이때 Navigation 과 Menu 에 서로 매칭되는 아이템의 id 는 같아야 한다. - MainActivity 그런 다음 MainActivity 에서 navigationController를 설정해주면 된다. activity_main 에서는 Fragment 가 보여질 FragmentContainerView 와 Bottomnavigation 을.. 안드로이드개발 2022. 1. 8. BottomNavigationView setOnNavigationItemSelectedListener is deprecated setOnNavigationItemSelectedListner 가 deprecated 되었다고 한다. android 공식 문서에서 해답을 찾으려고 했으나, 2022/01/08 기준 deprecated 되었다는 내용을 확인할 수 없었다. Stackoverflow 에서 확인한 결과, BottomNavigationView 의 parent 인 NavigationBarView 의 setOnItemSelectedListener 을 대신 사용하면 된다고 한다!! binding.mainBottomNavigation.run { setOnItemSelectedListener { when(it.itemId) { // } } } 위와 같이 구현하면 완료! 안드로이드개발 2022. 1. 8. Retrofit2으로 API 서버와 통신 처음에 무작정 안드로이드 개발을 할 때에는 직접 HTTP 통신을 위한 클래스를 작정하느라 하루종일 애를 썼던 기억이 있다. 역시 독학이 답은 아닌 것으로,,,, 아무튼 Retrofit 은 네트워크로 부터 전달된 데이터를 필요한 형태의 객체로 받을 수 있는 Http client 라이브러리 이다. Retrofit 을 사용하면 연결, 오류처리, 재시도 등을 직접 구현하지 않고 편리하게 처리할 수 있다. 1) Interface package com.example.flo import retrofit2.Call import retrofit2.http.Body import retrofit2.http.POST interface AuthRetrofitInterface { @POST("/users") fun signUp(.. 안드로이드개발 2022. 1. 2. 안드로이드 내부 데이터베이스 roomDB, 테이블(Entity)생성, DAO(메소드) roomDB 는 안드로이드가 지원하는 데이터베이스이다. 이전까지는 방대한 데이터를 저장할 일이 없어서, (키+값) 의 쌍으로 저장하는 SharedPreference 를 주로 사용하곤 했다. 그러나, 방대한 데이터를 저장하고, 삽입,삭제,수정 등과 같은 메소드를 사용하기 위해선 roomDB 를 사용해야 한다. 1) Entity package com.example.flo import androidx.room.Entity import androidx.room.PrimaryKey @Entity(tableName = "SongTable") data class Song( var title : String = "", var singer : String = "", var second : Int = 0, var play.. 안드로이드개발 2022. 1. 2. Viewpager2 배너 + 자동으로 슬라이딩 구현 수많은 어플에서 다음과 같은 배너 창을 본 적이 있을 것이다. 자동으로 넘어가는 배너를 만들기 위해 Viewpager 와 thread 를 사용하여 구현하였다. Viewpager2 를 구현하기 위해선 adapter 와 각 배너에 들어갈 화면(Fragment) 이 필요하다. package com.example.flo import androidx.fragment.app.Fragment import androidx.viewpager2.adapter.FragmentStateAdapter class RecommendViewpagerAdapter (fragment : Fragment) : FragmentStateAdapter(fragment) { private val fragmentlist : ArrayList = .. 안드로이드개발 2022. 1. 2. Fragment 에서 이벤트 발생 시 Activity 에서 발생할 행동 구현하기 오늘 발매 음악의 앨범타이틀에서 재생 버튼을 누르면 그 앨범의 수록곡들이 플레이리스트에 담기고, 수록곡의 첫 곡부터 재생되는 것을 구현하였다. 음악 재생은 MainActivity 에서 구현하며, 오늘 발매 음악의 앨범들은 HomeFragment 에서 RecyclerView 로 구현이 된 상태이다. 따라서 HomeFragment 의 앨범 재생버튼을 누르면, MainActivity 에서 터치 이벤트가 발생한 앨범의 수록곡들을 재생해야 하는 로직으로 구성되야 한다. 이를 구현하기 위해 Interface 를 이용하였다. Fragment 에서 인터페이스 리스너 변수를 하나 생성하고, 리사이클러뷰에 터치 이벤트가 발생하면, 인터페이스의 함수를 실행하는 것이다. 그렇다면, MainActivity 에서 인터페이스의 함.. 안드로이드개발 2022. 1. 2. seekbar 이동시 이벤트 발생(노래 이동) setOnSeekBarChangeListnener binding.mainPlayerSb.setOnSeekBarChangeListener(object : SeekBar.OnSeekBarChangeListener { override fun onProgressChanged(seekBar: SeekBar?, progress: Int, fromUser: Boolean) { } override fun onStartTrackingTouch(seekBar: SeekBar?) { songs[nowPos].second = seekBar!!.progress * songs[nowPos].playTime / 1000 } override fun onStopTrackingTouch(seekBar: SeekBar?) { songs[nowPos].second = seekBar!!.p.. 안드로이드개발 2022. 1. 2. android: Missing required view with ID Tablayout 의 Tabitem 에 id를 설정해줘서 생기는 문제였다. 만약 Tabitem 에 접근하고 싶다면 // to access first tab binding.tabs.getTabAt(0) 이런 식으로 사용해야한다. 안드로이드개발 2021. 10. 5. 안드로이드 NetworkOnMainThreadException 오류 해결 NetworkOnMainThreadException 이 발생했다. 말 그대로 메인 Thread 에서 network 통신을 시도하였을 때 발생하는 예외이다. Main 에서 간단히 http 통신 테스트를 하려했는데 발생하였다. 즉, AsyncTask 를 사용하여 Http 통신을 이용해라는 뜻이다. AsyncTask는 사용자가 thread 를 만들 필요 없이, 안드로이드 내부에서 자체적으로 스레드를 생성하고, 비동기로 진행한다. 만약 통신 중 어떠한 에러가 발생하더라도 통신은 새로운 thread를 통해 비동기로 진행되므로, 더 큰 문제를 막을 수 있다. 물론 직접 thread 나 Runnable 을 구현해도 되겠지만,, 나는 AsyncTask 를 애용할 것이다. 안드로이드개발 2021. 8. 12. 이전 1 2 다음