📌 학습 목표
- Life Cycle에 대해 설명할 수 있다.
- 각 Life Cycle에 적절한 요소를 추가할 수 있다.
- Intent를 활용해 Activity 간 데이터 전달을 할 수 있다.
📝 Standard Mission
생명주기를 활용하여 메모장 앱 만들어보기
화면 구성
1. 메모 화면 (EditText와 다음 화면으로 넘어가는 Button)
2. 확인 화면 (TextView에 메모 화면에서 작성한 내용 보여주기)
생명주기 기능 구현
1. onCreate
Layout XML 파일을 Activity에서 ContentView로 사용할 수 있도록 하기 (즉, 화면 설정)
xml을 통해서 레이아웃을 작성하지만, xml상에만 있으면 의미가 없기 때문에 xml 파일들을 코틀린 코드에서 활용하기 위해선 바인딩하는 작업이 필요하다. 즉, 메모리상에 올려주는 작업이 필요하다. 그것을 뷰 바인딩이라고 하는데 build.gradle 파일에 viewBinding { enabled = true } 추가해준다.
싱크를 마쳤으면 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")
}
}
'🍞 대외활동 > Univ Makeus Challenge' 카테고리의 다른 글
[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 |