wanna be dev 🧑‍💻

Cool 하고 Sick한 개발자가 되고 싶은 uzun입니다

A.K.A. Kick-snare, hyjhyj0901, h_uz99 solvedac-logo

Android/Challenge

패스트캠퍼스 챌린지 22일차

Kick_snare 2022. 2. 14. 23:51
728x90

22일차

30개 프로젝트로 배우는 Android 앱 개발 with Kotlin 초격차 패키지 Online

강의 목표


  • 프로젝트를 따라해보며 앱개발에 필요한 기술을 학습할 수 있습니다.
  • 프로젝트를 따라해보며 앱개발에 필요한 기술을 학습할 수 있습니다.
  • 앱 개발시 원하는 기능을 구현하기 위해 어떤 기술이 필요한 지 알 수 있습니다.
  • 디자인 아키텍처 패턴, 비동기 처리 등 효율적인 앱 개발 방법을 익힐 수 있습니다.

목차 02 Basic - Ch03. 비밀 다이어리


  • 인트로 (완성앱&구현기능소개)
  • 기본 UI 그리기
  • 자물쇠 페이지 구현하기 (로그인, 비밀번호 변경)
  • 다이어리 화면 구현하기 (글 작성, 삭제)
  • 아웃트로

다이어리 화면 구현하기 (글 작성, 삭제)

  • 잠금 해제성공하여 다이어리 화면으로 넘어가는 경우 다이어리 화면을 위한 액티비티로 넘기도록 프로그래밍 하였다
  • 액티비티를 생성하여 추가하기 위해 먼저 View를 생성한다
  • 화면안에 편집할 수 있는 공간을 설계한다
  • 다이어리 화면을 표시하는 액티비티 코드 파일을 생성해서 manifest에 등록한다
override fun onCreate(savedInstanceState: Bundle?) {
    super.onCreate(savedInstanceState)
    setContentView(R.layout.activity_dairy)

    val diaryEditText = findViewById<EditText>(R.id.diaryEditText)
    val detailPreferences = getSharedPreferences("diary", Context.MODE_PRIVATE)

    diaryEditText.setText(detailPreferences.getString("detail", ""))
}
  • View의 편집부와 연결하고, 로컬 DB을 가져와 초기값으로 셋팅해준다
  • 이제 EditText 뷰 부분을 수정할 때마다 로컬 DB에 내용을 저장하던가 등의 기능이 필요하다
  • addTextChangedListener 함수를 달아서 데이터가 변경될 때마다 로컬 DB를 edit할 수 있다
  • 하지만 이는 너무 비효율적이며 동기적 동작으로 자연스럽지 못하다
private val handler = Handler(Looper.getMainLooper())

val runnable = Runnable {
    getSharedPreferences("diary", Context.MODE_PRIVATE).edit {
        putString("detail", diaryEditText.text.toString())
    }
}

diaryEditText.addTextChangedListener {
    handler.removeCallbacks(runnable)
    handler.postDelayed(runnable, 500)
}
  • 핸들러와 runnable 객체를 생성한다
  • runnable 객체는 비동기적으로 로컬DB를 수정한다 (edit)
  • postDelayed에 runnable을 등록함으로써 0.5초 후에 실행된다
  • 이때 변경이 또 일어난다면 removeCallback을 통해 이미 등록된 지연 post를 지워버리기 때문에 입력을 연속적으로 한다면 비동기적인 로컬DB 갱신이 되지 않고 0.5초 이상 멈추었을 때에만 edit 되는 것이다
startActivity(Intent(this, DiaryActivity::class.java))
  • MainActivity(잠금화면)에서 넘어갈 수 있도록 연결해준다

본 포스팅은 패스트캠퍼스 환급 챌린지 참여를 위해 작성되었습니다.


수강인증샷

링크

https://bit.ly/37BpXiC

728x90