본문 바로가기

전체 글74

[Kotlin] Coroutine을 이용한 간단한 타이머 1. 시작 버튼을 클릭했을 때, System의 현재 시간을 StartTime 변수에 저장하고 인수로 시작 시간을 주어, Timer를 시작시킨다. 2. Coroutine Scope 안에서 while문을 실행시켜 System의 시간을 Delay를 이용 계속 갱신한다. 이때 화면에 표시될 시간은 Scope 안에서 [ 갱신된 System의 시간 - 인수로 전달된 시간 ]이 될 것이다. 3. 이미 시작이 된 경우, 중지 또는 타이머를 재개시킨다. 이때, 재개시키는 경우의 시간은 중지가 된 시점부터, System의 시간을 뺀 값이다. 그 후, Timer에게 재개 시간을 인수로 주어, Timer를 다시 시작한다. private var isStart = false private var startTime = 0L pri.. 2022. 2. 16.
[kotlin] 운동 일지 App 개발일지 #03 본격적으로 Room을 이용하여 삽입, 삭제, 수정을 적용시키고 있다. 1:N, M:N의 관계를 가진 Entity들을 삽입, 삭제, 조회 기능을 추가하였다. 현재 운동일지 App의 Entity Dialog 그램이다. 루틴, 운동 Entity와 루틴, 운동부위 Entity는 서로 M : N 의 관계를 가진다. 루틴이 삭제되어도 등록한 운동들은 삭제되지 않아야 하고, 운동 부위들도 삭제되지 않아야 하기 때문에 이런 관계를 가진다. 운동, 운동세트는 1:N의 관계를 가진다. 운동이 삭제되면, 운동세트도 사라진다. 한눈에 보기 쉽게 SQL WorkBench로 작성한 것이며, 실제 Room Database와 다르다. 운동 추가 화면 루틴에 운동이 추가된 화면 운동 CardView 클릭 운동 검색 창 체크된 운동이 .. 2022. 2. 4.
[Kotlin] Fragment already added: DialogFragment 운동일지 App을 개발하는 중 발생한 오류이다. setOnClickListener 로 버튼을 클릭하면, DialogFragment의 메소드 show()로 Fragment를 띄웠는데 버튼을 연타하니 Fragment가 이미 추가되었다는 메시지를 받게되었다. 해결책 button.setOnClickListener { if(!DialogFragment.isAdded) DialogFragment.show(childFragmentManager,"SEARCH_DIALOG") } DialogFragment가 추가되지 않았다면 Show 메소드를 실행하도록 하여 해결! 2022. 2. 3.
[Kotlin] Adpater에서 Room Database Delete Event 받기 1. Adpater 매개변수로 onDeleteCallBack 이라는 변수 -> 람다 함수를 반환 -> 람다함수는 Routine 값을 매개변수로, Unit을 리턴값으로 갖는다. class RoutineAdapter(private val onDeleteCallBack: (Routine) -> Unit) : {} 2. Adpater item 중 클릭 되었을 때 onDeleteCallBack을 호출하고 싶은 곳에 작성 override fun onBindViewHolder(holder: RoutineViewHolder, position: Int) { val currentItem = routineList[position] holder.binding.deleteBtn.setOnClickListener { onDele.. 2022. 2. 3.
[Kotlin] Coroutines (코루틴) 코루틴이란? 비동기적으로 실행되는 코드를 간소화하기 위해 Android에서 사용할 수 있는 동시 실행 설계 패턴이다. 코루틴을 사용할 때의 이점 기본 스레드를 차단하여 앱이 응답하지 않게 만들 수도 있는 장기 실행 작업을 관리하는 데 수월하다. 코루틴을 사용하면 세부적인 제어를 통해 스레드를 전달할 수 있다. withContext()를 사용하면 콜백을 도입하지 않고도 코드 줄의 스레드 풀을 제어할 수 있으므로 데이터베이스에서 읽기, 네트워크 요청 실행과 같은 매우 작은 함수에 이를 적용할 수 있다. 코루틴 기능 4가지 경량: 코루틴을 실행 중인 스레드를 차단하지 않는 정지를 지원하므로 단일 스레드에서 많은 코루틴을 실행할 수 있습니다. 정지는 많은 동시 작업을 지원하면서도 차단보다 메모리를 절약합니다. .. 2022. 2. 1.
Android Icon drawable 추가하기 (Vector Asset) res -> new -> Vector Asset 빨간 동그라미 부분 클릭 사용하고 싶은 아이콘 선택 골랐으면 OK 버튼 눌러주고 색상, 크기를 지정해준 뒤, Next 버튼 클릭 마지막으로 Finish 버튼까지 클릭해주면 아이콘 추가 완료! 아이콘의 위치는 res/drawable 2022. 1. 27.
Material Custom Style Chip Material Chip 본문에 적혀있는 설명은 이러하다 칩을 통해 사용자는 정보를 입력하고, 선택하고, 콘텐츠를 필터링하거나, 작업을 트리거할 수 있습니다. Chip 중 Filter Chip을 Custom 할 것이다. Chip의 배경색, 글자 색, 체크 색깔을 Custom 할 것이다. 결과물은 이러하다. 배경색부터 지정해보자. res/color/chip_bg_state_list.xml state_checked가 true인 아이템 color를 선택되었을 때 바뀌었으면 하는 색깔을 지정해주고, 다른 아이템은 선택되지 않았을때의 색깔을 지정해준다. 글자 색을 지정해준다. res/color/chip_text_state_list 설명은 배경색과 같다. android Drawable에 Vector Asset을 추.. 2022. 1. 27.
[Kotlin] Custom Bottom Sheet + ListView TextView Spinner를 클릭했을 때, Bottom Sheet가 열리고 Bottom Sheet의 ListView의 아이템을 클릭해서 TextView의 text로 지정하는 방법이다. 시연 영상 BottomSheetDialogFragment를 사용하기 위해선, Gradle:app 에 material을 의존성 주입을 해주어야 사용할 수 있다. // build.gradle (app) implementation "com.google.android.material:material:1.4.0" Bottom Sheet Layout ( .xml ) // layout/custom_bottom_sheet.xml TextView Spinner Layout ( .xml ) Scroll Up할 경우에, BottomShee.. 2022. 1. 27.
[Android] TextView를 Spinner처럼 보이게 하는 방법 TextView의 옵션의 Background로 테두리를 만들고 drawableEnd로 드롭다운 아이콘을 지정해주면 끝! 다음과 같은 결과물을 확인할 수 있다. 다른 아이콘을 넣어서 다른 방식으로도 활용할 수 있을 것 같다. 연필 아이콘 android:drawableEnd="@drawable/ic_baseline_create_24" 2022. 1. 27.