๋จผ์ ์ญ์ ๋ฒํผ์ ์ถ๊ฐํด ์ค.
fragment_detail.xml
<?xml version="1.0" encoding="utf-8"?>
<androidx.constraintlayout.widget.ConstraintLayout
...>
<LinearLayout
...>
...
<!-- ์ด ๋ถ๋ถ๋ง ์ถ๊ฐ -->
<ImageView
android:id="@+id/det_delete"
android:layout_width="25dp"
android:layout_height="match_parent"
android:src="@drawable/icon_delete"/>
<Space
android:layout_width="5dp"
android:layout_height="match_parent"/>
<!-- ------------- -->
<ImageView
android:id="@+id/det_edit"
android:layout_width="25dp"
android:layout_height="match_parent"
android:src="@drawable/icon_edit"/>
</LinearLayout>
...
</androidx.constraintlayout.widget.ConstraintLayout>
์ด์ ์ญ์ ๊ธฐ๋ฅ์ ๋ฃ์ด์ฃผ๋ฉด ๋.
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
import com.ta2gi.note.room.NoteEntity
import kotlin.concurrent.thread
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)
detailBinding.detDelete.setOnClickListener(this)
return detailBinding.root
}
override fun onClick(view : View?) {
when(view) {
// ๋์๊ฐ๊ธฐ ๋ฒํผ
detailBinding.detCancel -> {
// ํ ํ๋ฉด์ผ๋ก ๋์๊ฐ๋ฉด์ ํด๋ฆญํ๋ ๋
ธํธ์ ์ ๋ณด๋ฅผ ์ด๊ธฐํ
mainActivity.noteUid = null
mainActivity.noteText = null
mainActivity.noteDate = null
mainActivity.noteColor = null
mainActivity.supportFragmentManager.popBackStack()
}
// ์์ ํ๊ธฐ ๋ฒํผ
detailBinding.detEdit -> mainActivity.fragmentController("edit", true)
// ์ญ์ ๋ฒํผ
detailBinding.detDelete -> {
thread {
val entity = NoteEntity(mainActivity.noteUid!!, mainActivity.noteText!!, mainActivity.noteDate!!, mainActivity.noteColor!!)
mainActivity.noteDatabase.noteDao().deleteNote(entity)
// ๋
ธํธ๊ฐ ์ญ์ ๋์ง ์๋ ค์ฃผ๊ธฐ
mainActivity.noteAdapter.notifyDataSetChanged()
// ํ ํ๋ฉด์ผ๋ก ๋์๊ฐ๋ฉด์ ํด๋ฆญํ๋ ๋
ธํธ์ ์ ๋ณด๋ฅผ ์ด๊ธฐํ
mainActivity.noteUid = null
mainActivity.noteText = null
mainActivity.noteDate = null
mainActivity.noteColor = null
mainActivity.supportFragmentManager.popBackStack()
}
}
}
}
// ์์ ํ๊ณ ๋์์จ ํ ์์ ๋ ํ
์คํธ๋ก ๋ฐ๊พธ๊ธฐ ์ํ ์ฉ๋
override fun onResume() {
super.onResume()
detailBinding.detText.text = mainActivity.noteText
}
}
๋๋ด๋ ค ํ์ง๋ง ๋ง์ง๋ง์ผ๋ก ๋ ธํธ ์ถ๊ฐ์ ์์ ์์ ๊ณต๋ฐฑ์ ์ ๋ ฅํ์ง ๋ชปํ๊ฒ ํ์.
trim()์ ๋ฌธ์์ด ์, ๋ค์ ๊ณต๋ฐฑ์ ๋ชจ๋ ์์ ์ฃผ๊ณ
.isEmpty()๋ ๊ณต๋ฐฑ์ผ ๊ฒฝ์ฐ๋ฅผ ๋ป ํจ.
AddFragment.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.google.android.material.snackbar.Snackbar
import com.ta2gi.note.MainActivity
import com.ta2gi.note.room.NoteEntity
import com.ta2gi.note.databinding.FragmentAddBinding
import java.text.SimpleDateFormat
import java.util.*
import kotlin.concurrent.thread
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().trim()
// ๊ณต๋ฐฑ์ผ ๊ฒฝ์ฐ
if(editText.isEmpty()) {
mainActivity.hideKeyboard(mainActivity)
Snackbar.make(addBinding.root, "โ๋ด์ฉ์ ์
๋ ฅํด์ฃผ์ธ์", Snackbar.LENGTH_SHORT).show()
return
}
// ์ค๋ ๋ ์ง ๊ฐ์ ธ์ค๊ธฐ(์์ฑ์ผ)
val sdf = SimpleDateFormat("yyyy.MM.dd", Locale.KOREAN)
val date = sdf.format(System.currentTimeMillis())
// ๋
ธํธ ์์ ์ ํ๊ธฐ
val noteColor = mainActivity.noteColor()
// ๋
ธํธ ์ ๋ณด ๊ฐ์ฒด์ ๋ฃ๊ธฐ
val entity = NoteEntity(null, editText, date, noteColor)
// ๋ฐ์ดํฐ๋ฒ ์ด์ค์ ๋
ธํธ ์ถ๊ฐ
thread {
mainActivity.noteDatabase.noteDao().insertNote(entity)
// ์ด๋ํฐ์ ๋ฆฌ์คํธ ๋ณ๊ฒฝ ์ฌํญ ์๋ ค์ฃผ๊ณ ํค๋ณด๋ ๋ด๋ฆฌ๊ธฐ
mainActivity.noteAdapter.notifyDataSetChanged()
mainActivity.hideKeyboard(mainActivity)
mainActivity.supportFragmentManager.popBackStack()
}
}
}
}
}
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.google.android.material.snackbar.Snackbar
import com.ta2gi.note.MainActivity
import com.ta2gi.note.room.NoteEntity
import com.ta2gi.note.databinding.FragmentEditBinding
import kotlin.concurrent.thread
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().trim()
// ๊ณต๋ฐฑ์ผ ๊ฒฝ์ฐ
if(editText.isEmpty()) {
mainActivity.hideKeyboard(mainActivity)
Snackbar.make(editBinding.root, "โ๋ด์ฉ์ ์
๋ ฅํด์ฃผ์ธ์", Snackbar.LENGTH_SHORT).show()
return
}
// ์์ ํ ๋
ธํธ ์ ๋ณด ๊ฐ์ฒด์ ๋ฃ๊ธฐ
val entity = NoteEntity(mainActivity.noteUid!!, editText, mainActivity.noteDate!!, mainActivity.noteColor!!)
thread {
mainActivity.noteDatabase.noteDao().updateNote(entity)
// ์๋ฃํ๊ณ ๋์๊ฐ ๋ ํ๋๊ทธ๋จผํธ ํ
์คํธ๋ฅผ ์์ ํ ํ
์คํธ๋ก ๋ฐ๊ฟ์ฃผ๊ธฐ
mainActivity.noteText = editText
// ์ด๋ํฐ์ ๋ฆฌ์คํธ ๋ณ๊ฒฝ ์ฌํญ ์๋ ค์ฃผ๊ณ ํค๋ณด๋ ๋ด๋ฆฌ๊ธฐ
mainActivity.noteAdapter.notifyDataSetChanged()
mainActivity.hideKeyboard(mainActivity)
mainActivity.supportFragmentManager.popBackStack()
}
}
}
}
}
์ฌ๊ธฐ๊น์ง Note ์ฑ ๋ง๋ค๊ธฐ์์.
โป ์ด๋ํฐ์ ๋ด์ฉ ๋ณ๊ฒฝ์ ์๋ ค์ฃผ๋ notifyDataSetChanged()๋ฅผ ๋ชจ๋ ์ฃผ์์ฒ๋ฆฌํ๊ณ ์คํํด๋ ์ ๋๋ค. ์ ๊ทธ๋ฐ์ง๋ ๋๋ ๋ชจ๋ฅด๊ฒ ๋ค.
The End..๐ต
'๐ฑ > ๐Project' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[Kotlin] ๋์ ๊ฒ์ ์ฑ ๋ง๋ค๊ธฐ๏ผ (0) | 2023.01.26 |
---|---|
[Kotlin] ๋์ ๊ฒ์ ์ฑ ๋ง๋ค๊ธฐ๏ผ (0) | 2023.01.26 |
[Kotlin] Note ์ฑ ๋ง๋ค๊ธฐ๏ผ (1) | 2023.01.11 |
[Kotlin] Note ์ฑ ๋ง๋ค๊ธฐ๏ผ (0) | 2023.01.10 |
[Kotlin] Note ์ฑ ๋ง๋ค๊ธฐ๏ผ (0) | 2023.01.09 |