[UMC] Android 4주차 워크북 (LifeCycle)

2022. 10. 18. 19:54·🍞 대외활동 & 부트캠프/IT연합동아리 UMC

📌 학습 목표

- Life Cycle에 대해 설명할 수 있다.
- 각 Life Cycle에 적절한 요소를 추가할 수 있다.
- Intent를 활용해 Activity 간 데이터 전달을 할 수 있다.

 

📝 Standard Mission

생명주기를 활용하여 메모장 앱 만들어보기

 

화면 구성


1. 메모 화면 (EditText와 다음 화면으로 넘어가는 Button)

activity_main.xml


2. 확인 화면 (TextView에 메모 화면에서 작성한 내용 보여주기)

 

생명주기 기능 구현


1. onCreate

Layout XML 파일을 Activity에서 ContentView로 사용할 수 있도록 하기 (즉, 화면 설정)

 

xml을 통해서 레이아웃을 작성하지만, xml상에만 있으면 의미가 없기 때문에 xml 파일들을 코틀린 코드에서 활용하기 위해선 바인딩하는 작업이 필요하다. 즉, 메모리상에 올려주는 작업이 필요하다. 그것을 뷰 바인딩이라고 하는데 build.gradle 파일에 viewBinding { enabled = true } 추가해준다.

(오른쪽 위 Sync now를 꼭 눌러준다!)

 

싱크를 마쳤으면 activity_main이라는 xml파일에 해당하는 클래스를 안드로이드에서 자동적으로 만들어준다. 클래스 자체만 있으면 의미가 없으므로 클래스를 인스턴스화 메모리에 올려주는 과정이 있어야 한다. 즉, 아래 코드처럼 .inflate라는 자체가 메모리에 올려주는 과정이라고 볼 수 있다.

 

메모 화면에서 Button을 누르면 EditText의 값을 putExtra로 보내주고 확인 화면으로 넘어가게 만들어준다. 

과정을 확인하기 위해 토스트(Toast) 메세지도 사용했다.

 

2. onStop

메모를 입력하는 EditText의 현재 값을 Activity에 전역변수를 하나 만들어서 담아두기
전역변수에 저장하고 나서, 메모를 입력하는 EditText는 비우기

 


3. onRestart

Dialog를 활용하여 이어서 작성할거냐고 묻는 창 띄우기
예를 눌렀다면, onStop에서 저장한 전역변수 내용으로 EditText 내용으로 설정하기
아니요를 눌렀다면, onStop에서 저장했던 변수 비우고 (빈 값으로 만들고) EditText 비우기

 

❗예 눌렀을 경우

EditText내용이 유지되는 것을 볼 수 있다.

 

❗아니요 눌렀을 경우

EditText 내용이 삭제되는 것을 볼 수 있다.

 

 

📌 최종 코드

MainActivity.kt

package com.example.homework4

import android.content.DialogInterface
import android.content.Intent
import androidx.appcompat.app.AppCompatActivity
import android.os.Bundle
import android.text.Editable
import android.util.Log
import android.widget.Toast
import androidx.appcompat.app.AlertDialog
import com.example.homework4.databinding.ActivityMainBinding

class MainActivity : AppCompatActivity() {

    private lateinit var binding:ActivityMainBinding
    private var memo: String = ""

    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        binding = ActivityMainBinding.inflate(layoutInflater)
        val view = binding.root
        setContentView(view)

        binding.btnMain.setOnClickListener {
            var intent = Intent(this, SecondActivity::class.java)
            intent.putExtra("data", binding.edtMain.text.toString())
            startActivity(intent)
        }

        val create = Toast.makeText(this.applicationContext, "onCreate", Toast.LENGTH_SHORT)
        create.show()
    }

    override fun onStop() {
        super.onStop()
        memo = binding.edtMain.text.toString()
        binding.edtMain.text.clear()

        val stop = Toast.makeText(this.applicationContext, "onStop", Toast.LENGTH_SHORT)
        stop.show()
    }

    override fun onRestart() {
        super.onRestart()
        AlertDialog.Builder(this)
            .setTitle("잠깐!")
            .setMessage("이어서 작성하시겠습니까?")
            .setPositiveButton("예") {dialog, which ->
                binding.edtMain.setText(memo)
            }
            .setNegativeButton("아니요") {dialog, which ->
                binding.edtMain.text.clear()
            }
            .create()
            .show()

        val restart = Toast.makeText(this.applicationContext, "onRestart", Toast.LENGTH_SHORT)
        restart.show()
    }
}

 

SecondActivity.kt

package com.example.homework4

import androidx.appcompat.app.AppCompatActivity
import android.os.Bundle
import com.example.homework4.databinding.ActivityMainBinding
import com.example.homework4.databinding.ActivitySecondBinding

class SecondActivity : AppCompatActivity() {

    lateinit var binding: ActivitySecondBinding
    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        binding = ActivitySecondBinding.inflate(layoutInflater)
        setContentView(binding.root)

        binding.textSecond.text = intent.getStringExtra("data")
    }
}
저작자표시 (새창열림)

'🍞 대외활동 & 부트캠프 > IT연합동아리 UMC' 카테고리의 다른 글

[UMC] Android 5주차 워크북 (RecyclerView) - 메모장 앱  (0) 2022.10.24
[UMC] Android 5주차 워크북 (ListView)  (0) 2022.10.23
[UMC] Android 3주차 워크북 (Activity와 Fragment)  (0) 2022.10.15
[UMC] Android 2주차 워크북 (Layout) - 유튜브  (0) 2022.10.02
[UMC] Android 2주차 워크북 (Layout) - 인스타그램  (0) 2022.10.02
'🍞 대외활동 & 부트캠프/IT연합동아리 UMC' 카테고리의 다른 글
  • [UMC] Android 5주차 워크북 (RecyclerView) - 메모장 앱
  • [UMC] Android 5주차 워크북 (ListView)
  • [UMC] Android 3주차 워크북 (Activity와 Fragment)
  • [UMC] Android 2주차 워크북 (Layout) - 유튜브
박빵이
박빵이
2025년에도 갓생살기
  • 박빵이
    기억보다 기록
    박빵이
  • 전체
    오늘
    어제
    • 분류 전체보기 (337)
      • 🍞 FrontEnd (97)
        • HTML+CSS (4)
        • JavaScript (17)
        • TypeScript (4)
        • React (52)
        • Next.js (2)
        • Android (15)
      • 🍞 BackEnd (24)
        • Java (15)
        • Node.js (6)
        • Spring (1)
      • 🍞 Cloud & Infra (0)
        • AWS SAA (0)
        • Microsoft Azure (0)
      • 🍞 Algorithm (147)
        • C++ (4)
        • Baekjoon (41)
        • Programmers (97)
      • 🍞 Computer Science (18)
        • 운영체제 (1)
        • 데이터 통신 (6)
        • 네트워크 (6)
        • 데이터베이스 (1)
      • 🍞 대외활동 & 부트캠프 (42)
        • 삼성 청년 SW 아카데미 (1)
        • LG유플러스 유레카 (0)
        • 한국대학생IT경영학회 (1)
        • IT연합동아리 UMC (17)
        • 길벗 블로깅 멘토 (18)
        • IT연합동아리 피로그래밍 (3)
        • 개발 컨퍼런스 (2)
  • 블로그 메뉴

    • Admin
  • 링크

    • GitHub
  • 인기 글

  • 태그

    C++
    Java
    길벗 블로깅 멘토링
    umc
    level1
    level2
    코딩자율학습
    프로그래머스
    코틀린
    알고리즘
    안드로이드
    길벗 블로깅 멘토
    react
    위상정렬
    JavaScript
    map
    Android
    Front
    유니온파인드
    백준
  • 최근 댓글

  • 최근 글

  • hELLO· Designed By정상우.v4.10.3
박빵이
[UMC] Android 4주차 워크북 (LifeCycle)
상단으로

티스토리툴바