전체 글96 코드 MVC -> MVVM 전환 트러블 슈팅 트러블 슈팅 : 처음 있었던 문제: 초기화 문제 : lateinit을 by lazy로 바꾸어 주니까 해결 invoke method 문제 : 라이브 데이터 초기값 넣어줌으로써 해결 리포지토리에 있는 값을 넘겨 오는데 한템포 지연되는 문제 : 아직 해결 못함. 멀티 뷰타입에 있는 값이 업데이트가 안되는 문제 : submit 리스트 위치 확인하면서 해결 멀티 뷰타입 안에있는 리사이클러뷰가 업데이트 안되는 문제 : adapter notify해줘야함. -> notify 해줬는데 [java.lang.IllegalStateException: Cannot call this method while RecyclerView is computing a layout or scrolling] 에러가 뜸. -> 백그라운드 스레드로.. 2024. 3. 10. listAdapter 아이템이 update될 때 깜빡이는 이쓔 문제점: 산 리스트에서 다른 산의 정보를 보려고 클릭할 때 화면에서 리스트가 깜빡거리는 문제 시도 및 해결법: - 아이템이 같은지 확인하는 부분을 산 이름 값을 넣어 수정 DiffUtil의 areItemsTheSame의 아이템이 같은지 확인하는 부분에서 다른 아이템이 들어왔다고 인식을 해서 해당 부분의 값을 현재 있는 산 이름과 같은지 확인하는 것으로 해결 - itemAnimator를 null로 초기화 기본적으로 적용되어 있는 애니메이션을 비활성화해 깜빡거리지 않도록 하여 해결 느낀점 : 리스트 어댑터 사용방법을 살짝 잊고 있었는데 다시 보니 리스트 어댑터 사용 방법을 완전히 익힐 수 있었다. 2024. 3. 8. 룸 디비 연결 후에 나타난 에러 트러블 슈팅 과정 1. 첫 오류 챗봇 프래그먼트로 이동 자체가 안되는 이쓔가 있었다. java.lang.ClassCastException: android.app.Application cannot be cast to com.mit.offroader.ui.fragment.chatbot.ChatBotApplication // ChatBotFragment: private val chatBotViewModel: ChatBotViewModel by viewModels { ChatBotViewModelFactory((requireActivity().application as ChatBotApplication).repository) } // ChatBotApplication: package com.mit.offroader.ui.frag.. 2024. 3. 7. 코틀린| MVVM & 파이어스토어 데이터베이스에서 데이터 가져오기 MVVM 패턴은 뷰 - 뷰모델 - 모델 - 디비 순으로 연결이 되기 때문에 리포지토리에서 파이어스토어 디비랑 연결을 해주었다. // Repository.kt class Repository { private val db: FirebaseFirestore = FirebaseFirestore.getInstance() init { Log.d(TAG, "init 함수") initPush(0) } fun initPush(index: Int) { Log.d(TAG, "initPush 함수 여기에서 데이터베이스에 있는 값 접근") val sanArrayList: ArrayList = arrayListOf() db.collection("sanlist").get().addOnSuccessListener { document.. 2024. 3. 6. TIL 보호되어 있는 글 입니다. 2024. 2. 13. [TIL] 숙련주차 회고 KPT 📖 Today I Learned 2024. 1. 23. [TIL] 다이얼로그 에딧텍스트 유효성 검사 및 버튼 활성화 코드 작성 📖 Today I Learned alert Dialog에 있는 EditText의 유효성 검사를 하고 싶었고 그 결과에 따라 확인 버튼을 활성화 시키고 싶었다. 알러트 다이얼로그에서는 POSITIVE버튼과 NEGATIVE / NEUTRAL 버튼을 사용하기 떄문에 이 버튼들을 활성화 시키는 방법을 몰라서 인터넷에 검색을 해보았다. 찾아보니 자바 관련 코드만 찾을 수 있었고 너무 막혀서 튜터님꼐 가서 여쭤보았고 버튼 활성화를 어떻게 하면 할 수 있는지 알려주셔서 도움을 받았다. builder.getButton(AlertDialog.BUTTON_POSITIVE).isEnabled = true 버튼 활성화 방법을 배웠지만 그래도 감이 잡히지 않아서 이 코드를 깃허브에 검색해서 코틀린을 사용해서 유효성 검사를 한 .. 2024. 1. 18. [TIL] 커스텀 다이얼로그 Positive Button 활성화 / 📖 Today I Learned 🔮 학습 및 노트 정리 다이얼로그 버튼을 유효성 검사의 결과에 따라서 활성화 시키는 코드를 작성해 보았다. private fun addGroupBtn() { binding.ibtnAddContactAddGroup.setOnClickListener { val builder = AlertDialog.Builder(this) builder.setTitle(getString(R.string.dialog_add_group)) builder.setMessage(getString(R.string.dialog_new_group)) builder.setIcon(R.mipmap.ic_launcher) val v1 = layoutInflater.inflate(R.layout.dialog_ad.. 2024. 1. 17. [프로그래머스 • 코틀린] 로또의 최고 순위와 최저 순위 #77484 #77484 🎄 Question ? Description Lotto 6/45(Hereinafter 'Lotto') is a popular lottery game where six numbers are drawn from a pool of 45 numbers. The lottery prize tiers are as follows1: Prize TiersRequirement 1 All six numbers match 2 Five numbers match 3 Four numbers match 4 Three numbers match 5 Two numbers match 6 (no prize) All other cases You bought a lotto ticket and have been waiting for .. 2024. 1. 17. [TIL] ViewPager2 TapLayout 📖 Today I Learned 🔮 ViewPager2 & TapLayout 탭 레이아웃과 뷰페이저 2를 동시에 적용시키면 아래 탭 두개를 누름에 따라 그 안의 뷰가 바뀌고 양 옆으로 밀어도 이동한다. 탭 레이아웃을 적용시킬 액티비티에 들어가는 코드: - 뷰페이저 어댑터와 프래그먼트를 연결시켜 준다. - registerOnPageChangeCallBack 화면에 호출 시켜주는 코드?? - 탭 레이아웃과 뷰페이저도 연결 탭에 들어가는 문자열도 추가 package com.example.contactapp.activity import androidx.appcompat.app.AppCompatActivity import android.os.Bundle import android.util.Log import an.. 2024. 1. 15. [프로그래머스 • 코틀린] 기사단원의 무기 #136798 #136798 🎄 Question ? https://school.programmers.co.kr/learn/courses/30/lessons/136798# 🧩 Thought Process 소수의 개수를 셈할 수 있는 함수를 따로 만들고 소수의 개수가 제한 수 보다 크면 공격 수를 무게로 더해준다. 소수의 개수를 찾을 때 시간 복잡도를 고려해 주어야 한다. class Solution { fun solution(number: Int, limit: Int, power: Int): Int { var answer: Int = 0 for (i in 1..number) { var nLCD = countLCD(i) when { (nLCD > limit) -> answer += power else -> answer +=.. 2024. 1. 15. [TIL] MVVM 적용 - 안드로이드 코틀린 (예시코드) 주석에 달아놓은 숫자 순서 따라가면서 읽어보면 이해가 더 쉽다. SignUpActivity.kt package com.example.startactitivity.signup import android.content.Intent import androidx.appcompat.app.AppCompatActivity import android.os.Bundle import androidx.activity.result.ActivityResultLauncher import androidx.activity.result.contract.ActivityResultContracts import androidx.lifecycle.ViewModelProvider import com.example.startactitivity.. 2024. 1. 12. Fragment + 데이터 전달 xml FirstFragment.kt 동적으로 프래그먼트 추가하기 supportFragmentManager.commit { replace(R.id.frameLayout, frag) setReorderingAllowed(true) addToBackStack("") } supportFragmentManager 사용자 상호작용에 응답해 Fragment를 추가하거나 삭제하는등 작업을 할 수 있게 해주는 매니저 replace 어느프레임 레이아웃에 띄울것이냐, 어떤프래그먼트냐 setReorderingAllowed 애니메이션과 전환이 올바르게 작동하도록 트랜잭션과 관련된 프래그먼트의 상태 변경을 최적화 addToBackStack 뒤로가기 버튼 클릭시 다음 액션 (이전 fragment로 가거나 앱이 종료되거나) 2024. 1. 9. Recycler View 사용방법 xml: recyclerview.xml 재사용 되는 화면 정의 AdapterClass.kt class MyAdapter(val mItems: MutableList) : RecyclerView.Adapter() { interface ItemClick { fun onClick(view : View, position : Int) } var itemClick : ItemClick? = null override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): Holder { val binding = ItemRecyclerviewBinding.inflate(LayoutInflater.from(parent.context), parent, false) return.. 2024. 1. 9. [TIL] 📖 Today I Learned 🔮 학습 및 노트 정리 Recycler View 학습 : https://occhiolism.tistory.com/96 Fragment 학습 : https://occhiolism.tistory.com/96 💡 알고리즘 - 코틀린 : 프로그래머스 코드 카타 덧칠하기 복습 및 다른 풀이 학습 https://occhiolism.tistory.com/92 2024. 1. 8. 이전 1 2 3 4 ··· 7 다음