ViewBinding을 추가해 줌.
build.gradle (module)
android {
...
buildFeatures {
viewBinding = true
}
}
그리고 메모 추가, 상세화면, 수정의 기능들을 만들었음.
설명은 주석으로 다 해놨음.
HomeFragment.kt
package com.ta2gi.note.fragment
import android.os.Bundle
import android.util.Log
import androidx.fragment.app.Fragment
import android.view.LayoutInflater
import android.view.View
import android.view.ViewGroup
import com.ta2gi.note.MainActivity
import com.ta2gi.note.R
import com.ta2gi.note.databinding.FragmentHomeBinding
class HomeFragment(val mainActivity : MainActivity) : Fragment(), View.OnClickListener {
lateinit var homeBinding : FragmentHomeBinding
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
}
override fun onCreateView(inflater: LayoutInflater, container: ViewGroup?, savedInstanceState: Bundle?): View? {
homeBinding = FragmentHomeBinding.inflate(inflater)
// 어뎁터 끼우기
homeBinding.homRecyclerview.adapter = mainActivity.noteAdapter
// 클릭 이벤트가 있는 친구들은 setOnClickListener를 달아줘야 함
homeBinding.homAdd.setOnClickListener(this)
return homeBinding.root
}
override fun onClick(view : View?) {
when(view) {
// 추가 버튼
// +를 누르면 AddFragment로 이동
homeBinding.homAdd -> mainActivity.fragmentController("add", true)
}
}
}
AddFragment.kt
package com.ta2gi.note.fragment
import android.os.Bundle
import android.util.Log
import androidx.fragment.app.Fragment
import android.view.LayoutInflater
import android.view.View
import android.view.ViewGroup
import com.ta2gi.note.MainActivity
import com.ta2gi.note.NoteEntity
import com.ta2gi.note.R
import com.ta2gi.note.databinding.FragmentAddBinding
import java.text.SimpleDateFormat
import java.util.*
class AddFragment(val mainActivity : MainActivity) : Fragment(), View.OnClickListener {
lateinit var addBinding : FragmentAddBinding
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
}
override fun onCreateView(inflater: LayoutInflater, container: ViewGroup?, savedInstanceState: Bundle?): View? {
addBinding = FragmentAddBinding.inflate(inflater)
addBinding.addCancel.setOnClickListener(this)
addBinding.addComplete.setOnClickListener(this)
return addBinding.root
}
override fun onClick(view : View?) {
when(view) {
// 돌아가기 버튼
// 이전의 프래그먼트로 돌아가기
addBinding.addCancel -> mainActivity.supportFragmentManager.popBackStack()
// 완료 버튼
addBinding.addComplete -> {
// 텍스트에 적힌 내용 가져오기
val editText = addBinding.addEdittext.text.toString()
// 오늘 날짜 가져오기(작성일)
val sdf = SimpleDateFormat("yyyy.MM.dd", Locale.KOREAN)
val date = sdf.format(System.currentTimeMillis())
// 노트 색상 정하기
val noteColor = mainActivity.noteColor()
// 노트 정보 객체에 넣기
val entity = NoteEntity(editText, date, noteColor)
// 리스트에 작성한 노트 추가
mainActivity.noteList.add(entity)
// 어뎁터에 리스트 변경 사항 알려주고 키보드 내리기
mainActivity.noteAdapter.notifyDataSetChanged()
mainActivity.hideKeyboard(mainActivity)
mainActivity.supportFragmentManager.popBackStack()
}
}
}
}
DetailFragment.kt
package com.ta2gi.note.fragment
import android.os.Bundle
import androidx.fragment.app.Fragment
import android.view.LayoutInflater
import android.view.View
import android.view.ViewGroup
import com.ta2gi.note.MainActivity
import com.ta2gi.note.R
import com.ta2gi.note.databinding.FragmentDetailBinding
class DetailFragment(val mainActivity : MainActivity) : Fragment(), View.OnClickListener {
lateinit var detailBinding: FragmentDetailBinding
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
}
override fun onCreateView(inflater: LayoutInflater, container: ViewGroup?, savedInstanceState: Bundle?): View? {
detailBinding = FragmentDetailBinding.inflate(inflater)
detailBinding.detTitle.text = mainActivity.noteDate
detailBinding.detText.text = mainActivity.noteText
detailBinding.detCancel.setOnClickListener(this)
detailBinding.detEdit.setOnClickListener(this)
return detailBinding.root
}
override fun onClick(view : View?) {
when(view) {
// 돌아가기 버튼
detailBinding.detCancel -> mainActivity.supportFragmentManager.popBackStack()
// 수정하기 버튼
detailBinding.detEdit -> mainActivity.fragmentController("edit", true)
}
}
// 수정하고 돌아온 후 수정된 텍스트로 바꾸기 위한 용도
override fun onResume() {
super.onResume()
detailBinding.detText.text = mainActivity.noteText
}
}
EditFragment.kt
package com.ta2gi.note.fragment
import android.os.Bundle
import androidx.fragment.app.Fragment
import android.view.LayoutInflater
import android.view.View
import android.view.ViewGroup
import com.ta2gi.note.MainActivity
import com.ta2gi.note.NoteEntity
import com.ta2gi.note.R
import com.ta2gi.note.databinding.FragmentEditBinding
import java.text.SimpleDateFormat
import java.util.*
class EditFragment(val mainActivity : MainActivity) : Fragment(), View.OnClickListener {
lateinit var editBinding : FragmentEditBinding
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
}
override fun onCreateView(inflater: LayoutInflater, container: ViewGroup?, savedInstanceState: Bundle?): View? {
editBinding = FragmentEditBinding.inflate(inflater)
// 수정할 텍스트 가져오기
editBinding.ediEdittext.setText(mainActivity.noteText)
editBinding.ediCancel.setOnClickListener(this)
editBinding.ediComplete.setOnClickListener(this)
return editBinding.root
}
override fun onClick(view : View?) {
when(view) {
// 돌아가기 버튼
editBinding.ediCancel -> mainActivity.supportFragmentManager.popBackStack()
// 완료 버튼
editBinding.ediComplete -> {
// 텍스트에 적힌 내용 가져오기
val editText = editBinding.ediEdittext.text.toString()
// 수정한 노트 정보 객체에 넣기
val entity = NoteEntity(editText, mainActivity.noteDate, mainActivity.noteColor)
// 완료하고 돌아갈 때 프래그먼트 텍스트를 수정한 텍스트로 바꿔주기
mainActivity.noteText = editText
// 어뎁터에 리스트 변경 사항 알려주고 키보드 내리기
mainActivity.noteAdapter.notifyDataSetChanged()
mainActivity.hideKeyboard(mainActivity)
mainActivity.supportFragmentManager.popBackStack()
}
}
}
}
NoteAdapter.kt
package com.ta2gi.note
import android.content.res.ColorStateList
import android.graphics.Color
import android.view.LayoutInflater
import android.view.View
import android.view.ViewGroup
import android.widget.LinearLayout
import android.widget.TextView
import androidx.recyclerview.widget.RecyclerView
class NoteAdapter(val mainActivity : MainActivity, val noteList : MutableList<NoteEntity>) : RecyclerView.Adapter<NoteAdapter.ViewHolderClass>() {
override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): NoteAdapter.ViewHolderClass {
// 항목의 layout은 R.layout.list_item
val view = LayoutInflater.from(parent.context).inflate(R.layout.list_item, parent, false)
return ViewHolderClass(view)
}
override fun onBindViewHolder(holder: NoteAdapter.ViewHolderClass, position: Int) {
// 노트 내용 넣기
holder.note.text = noteList[position].note
// 노트 색상 넣기
holder.background.backgroundTintList = ColorStateList.valueOf(Color.parseColor(noteList[position].color))
holder.note.setOnClickListener {
// 클릭한 노트 정보 담고 프래그먼트 이동
mainActivity.noteText = holder.note.text.toString()
mainActivity.noteDate = noteList[position].date
mainActivity.noteColor = noteList[position].color
mainActivity.fragmentController("detail", true)
}
}
override fun getItemCount(): Int {
// 리스트에 담긴 항목의 크기만큼 나오게하기
return noteList.size
}
inner class ViewHolderClass(view : View) : RecyclerView.ViewHolder(view) {
val background = view.findViewById<LinearLayout>(R.id.ite_layout)
val note = view.findViewById<TextView>(R.id.ite_text)
}
}
NoteEntity.kt
package com.ta2gi.note
data class NoteEntity(
val note : String,
val date : String,
val color : String
)
위 코드들을 작성하고 실행해 보면 잘 됨. (안된다면 댓글 부탁드려요!)
근데 수정을 하고나서 홈 화면으로 돌아와 보면 바뀌지 않음.
해당 노트 객체에 접근해서 수정해야 하는데 객체를 따로 찾을 수 없음.
그리고 노트 작성 후 앱을 종료 후 다시 실행하면 다 사라져 있음!
찾으라면 어떻게든 찾겠지만 귀찮으니 얼른 Room을 이용해 해결해보겠음.
To be Continued..🧐
'📱 > 📘Project' 카테고리의 다른 글
[Kotlin] Note 앱 만들기4 (0) | 2023.01.11 |
---|---|
[Kotlin] Note 앱 만들기3 (1) | 2023.01.11 |
[Kotlin] Note 앱 만들기1 (0) | 2023.01.09 |
[Kotlin] TodoList 앱 만들기3 (0) | 2023.01.03 |
[Kotlin] TodoList 앱 만들기2 (2) | 2022.12.29 |