안드로이드 스튜디오 메모 앱 만들기(11)

윤재환·2024년 11월 26일

writememo 추가 작성

이전 포스트에서는 WriteMemoActivity로 이동하는 기능만 만들었지만 이번 포스트에서는 WriteMemoActivity의 기능을 완성을 하겠습니다.

아래는 추가로 작성한 WriteMEmoAcitivity입니다.

 //참조할 버튼과 텍스트들
        val editTextTitle = findViewById<EditText>(R.id.editTextTitle)
        val editTextContent = findViewById<EditText>(R.id.editTextContent)
        val buttonSaveMemo = findViewById<Button>(R.id.buttonSaveMemo)

        //저장 버튼 클릭 이벤트 처리
        buttonSaveMemo.setOnClickListener{
            val title = editTextTitle.text.toString().ifEmpty { "무제" }
            val content = editTextContent.text.toString()

            if (content.isNotEmpty()){
                //새로운 메모 데이터 생성
                val newMemo = MainActivity.Memo(
                    title = title,
                    content = content,
                    date = MainActivity.getCurrentDate()
                )

                val resultIntent = Intent()
                resultIntent.putExtra("newMemo", newMemo) // putExtra 사용
                setResult(RESULT_OK, resultIntent) // 결과 전달
                finish() // 현재 액티비티 종료

            }
        }
        

우선 시작하며 xml에 추가할 기능들을 참조해 줍니다.

title의 경우에는 작성을 안해도되기에 작성을 안할시 "무제"라고 나오게 했습니다.


MainActivity중 오류 방생

이전에 포스트에서 작성했던 코드들로 추가로 작성해보았지만

이전 포스트에 작성한 코드중 문제가 발생했습니다.

buttonWriteMemo.setOnClickListener {
    val intent = Intent(this, WriteMemoActivity::class.java)
    startActivity(intent)
}

여기서 startActivity의 경우는 새로운 화면으로 이동하고 결과를 다시 가져오는 기능이 없기 때문입니다.

작성한 메모를 다시 가져올려면 startActivityForResult또는 ActivityResultLauncher를 사용해야하지만
startActivityForResult은 deprecated가 되어 최신버전 API인 ActivityResultLauncher가 권장됩니다.

ActivityResultLauncher의 사용법

  • 1) ActivityResultLauncher선언
    • MainActivity에서 ActivityResultLauncher를 선언합니다
private lateinit var addMemoLauncher: ActivityResultLauncher<Intent>
  • 2) ActivityResultLauncher초기화
    • onCreate메서드에서 ActivityResultLauncher를 초기화 합니다.
addMemoLauncher = registerForActivityResult(ActivityResultContracts.StartActivityForResult()) { result ->
    if (result.resultCode == RESULT_OK) {
        val data = result.data
        val newMemo = data?.getSerializableExtra("newMemo") as? Memo
        if (newMemo != null) {
            memoList.add(newMemo) // 메모 추가
            adapter.notifyDataSetChanged() // RecyclerView 업데이트
            saveMemos() // 변경된 데이터 저장
        }
    }
}

이글을 작성하다보니 getSerializableExtra 또한 Deprecated가 나온다는 사실을 알았습니다.

이후의 유지보수등을 편하게 하기 위해서나 미래의 공부를 위해서 다음 포스트에 대대적인? 수정을 할 예정입니다.

다음 포스트에서는 최대한 deprecated가 나오지 않는 기능들로 다시 수정하여 올리겠습니다..

profile
백엔드 개발에 관심있는 1인

0개의 댓글