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 ์ฑ ๋ง๋ค๊ธฐ๏ผ (0) | 2023.01.11 |
---|---|
[Kotlin] Note ์ฑ ๋ง๋ค๊ธฐ๏ผ (1) | 2023.01.11 |
[Kotlin] Note ์ฑ ๋ง๋ค๊ธฐ๏ผ (0) | 2023.01.09 |
[Kotlin] TodoList ์ฑ ๋ง๋ค๊ธฐ๏ผ (0) | 2023.01.03 |
[Kotlin] TodoList ์ฑ ๋ง๋ค๊ธฐ๏ผ (2) | 2022.12.29 |