전체 글 321

[Sunflower 디비보기] 데이터 바인딩과 HtmlCompat.fromhtml

TextView 에 Html 형식으로 글자를 바꿀 수 있다. 데이터 바인딩을 통해 바인딩 어뎁터(BindingAdapter)로 연결하면 간단하게 구현 할 수 있다. @BindingAdapter("renderHtml") fun bindRenderHtml(view: TextView, description: String?) { if (description != null) { view.text = HtmlCompat.fromHtml(description, FROM_HTML_MODE_COMPACT) view.movementMethod = LinkMovementMethod.getInstance() } else { view.text = "" } } 입력) plant.description = 동해물과 백두산이(from..

[Sunflower 디비보기] ViewModel 주입(초기화) 과정

요약 viewModel 주입(Injection) Repository 와 ViewModel 을 생성 해서 Factory 에 넣은 다음 by 로 위임된 viewModels 에 주면 viewModel 을 주입해준다.(ktx 로 ViewModelProvider.get()와 같은 역활을 한다.) 결국 viewModel (LiveData) > repository > dao > db 요렇게 연결 되어서 view 와 연결되어 작업이 될 것 이다. M-V-VM private val viewModel: GardenPlantingListViewModel by viewModels { InjectorUtils.provideGardenPlantingListViewModelFactory(requireContext()) } Fact..

코틀린 생성자와 위임

주 생성자와 부 생성자 2가지로 나뉘며, 주 생성자는 클래스 선언 시 가시성 접근자(없으면 클래스 명) 뒤에 선언한다. class Car private constructor(_name: String) 자바는 부 생성자 처럼 클래스 내부에 선언 한다 private class Car { class(String name) } 부 생성자는 클래스 내부에서 파라미터를 달리하여 만든다. class Car private constructor(_name: String) { constructor(value: Int)} 클래스 생성 시 생성자를 정의하지 않으면 컴파일러는 인자가 없는 디폴트 생성자를 만든다 주 생성자 class Car constructor(_name: String){ val name : String ini..

추상클래스(abstract)와 인터페이스(interface)

차이점 추상 클래스는 상속과 필수구현을 위해 인터페이스는 필수구현을 위해 추상 클래스 클래스 내에 추상 메서드가 하나 이상 포함 되거나, abstract 로 정의 된 경우 추상 메서드가 하나라도 있으면 class 앞에 abstract 를 붙여야 함 추상 메서드는 구현 되지 않으며 상속받은 클래스에서만 구현되어야 한다. abstract 에는 final 을 붙일 수 없다. 이미 open 이다 생성자, 전역 변수도 선언 할 수 있고, 메서드 내용이 있을 수도 있다. 다중 상속 안됨 추상 클래스는 직접 생성될 수 없으며, 다른 클래스를 통해 생성되어야 한다. 직접 Car() 로 생성하면 아래와 같은 에러가 나타난다. Cannot create an instance of an abstract class abstra..

코틀린 Scope; apply, also, run, with, let

Scope 함수는 인스턴스의 속성, 함수를 영역내에서 분리해서 사용 할 수 있다. 깔끔하고, 가독성을 높여 준다. apply / also 인스턴스 반환 run(with) /let 최종값 반환 apply 인스턴스(클래스)를 생성한 후 변수에 담기 전 초기화 과정을 수행 할 때 인스턴스 생성 후 .apply{ } 스코프 내에서 인스턴스의 .이름 없이 바로 사용 가능 즉, 인스턴스 생성 하고, 변수에 변경되거나 초기화 값을 넣은 다음 할당 하게 된다. class Book(var title: String, var number:Int){} var a = Book("a", 5).apply{ title = "abcde" + name} 인스턴스가 그대로 반환 된다 run apply 와 같으나, 마지막 구문이 반환 된다..

안드로이드 스튜디오 패키지명 변경

아주 간단하게 하는 방법 1. 안드로이드 스튜디오 좌측 프로젝트 패널에서 톱니 아이콘 클릭 2. Compact Middle Packages 해제 3. 원하는 패키지명을 누른 뒤, 우클릭 -> refactor -> rename 4. 경고 팝업이 뜨면 전체(all) 선택 5. 깊은 경로 일 경우 아래로 내려 가면서 하나씩 변경 6. 기존 5개 경로에서 3개로 변경 하고 싶다면 6.1. 예) com.a.b.c.d --> com.a.b 6.2 상위 패키지 명을 변경 한 후 , 하위 디렉토리 및 파일을 선택 해서 refactor -> move -> 가장 아래에 있는 all directory 옮기기로 옮기면 됨. 7. 남은 껍데기 폴더는 지워 주면 된다. 8. 그래들과, 매니페스트를 보면 자동으로 바뀌어 있음 9...

[정각알림 중간알람] 50분 일하고 10분 휴식할 때 유용한 알림

정각알림과 중간알림은 모든 설정이 독립이며, 각각 다른 분(0 ~ 59분)을 설정 할 수 있습니다. 각각 다른 설정을 사용해서, 업무, 공부 등 일상생활에서 편리하고 유용하게 사용해 보세요. 무료 다운로드(구글 플레이) https://play.google.com/store/apps/details?id=com.comostudio.hourlyreminders 정각알림 중간알람 - 50분 10분 - Google Play 앱 정말 사용하기 쉽습니다. 앱 전원(우측 상단 정각 알림 사용하기 체크)을 켜기만 하면 매일 오전 8시부터 오후 10시까지 매시간 정각(정시)에 시간을 문장과 함께 음성으로 알려 드립니다! (아무 설정을 하지 않아도 말 해드리니 걱정 마세요! 전혀 어렵지 않아요!) ■ 자유로운 2개의 정각 ..