[Android/Flutter 교육] 35일차

MSU·2024년 2월 16일

Android-Flutter

목록 보기
37/85
post-thumbnail

코루틴 특강은 미니프로젝트 할 때 먼저 배울 예정
특강일에는 QNA와 과제로 진행

데이터 클래스를 사용하면 개발자의 편의를 위한 몇가지 메서드가 오버라이딩 됨
그냥 클래스를 사용해도 상관없으나 어떤 데이터를 관리하기 위한 목적이라면 데이터 클래스를 주로 사용함

EX13

학생 클래스 정의

DBHelper 클래스 정의

Dao 클래스 및 메서드 정의 -> select one, select all, insert, update, delete
select의 경우 rawQuery로 실행한 sql문 결과를 cursor에 담고 moveNext를 실행할때마다 레코드 한줄씩 접근할 수 있다.
select one인 경우 moveNext를 한번만 실행하고, select all이면 마지막 레코드에 접근할때까지 while문으로 반복한다. moveNext메서드는 레코드가 있을 때 true를 반환하고 남은 레코드가 없다면 false를 반환하기 때문에 while문의 반복 조건으로 사용할 수 있다.

학생 객체를 담을 리스트는 MainFragment에서만 사용하므로 관리적인 차원에서 MainActivity가 아닌 MainFragment에서 생성해서 사용한다.

각 프래그먼트에 사용할 데이터를 불러오는 메서드를 작성해준다. settingData()
MainFragment에는 학생객체를 담을 리스트 lateinit var studentList:MutableList<StudentModel>
InfoFragment에는 학생정보를 보여줄 학생 객체 lateinit var studentModel: StudentModel

데이터를 셋팅하는 메서드 setData
뷰를 셋팅하는 메서드 initView
툴바도 따로 메서드로 셋팅해준다. setToolbar
onCreateView에서 따로 정리한 메서드를 호출해준다.

BottomSheet

balnk Fragment를 추가한다

modalBottomSheet 가 별도로 존재하지만 빈 프래그먼트로 따로 생성해도 상관없다

리사이클러뷰 항목 클릭시 나오게 설정


// MainSheetFragment.kt

class MainSheetFragment : BottomSheetDialogFragment() {

    override fun onCreateView(
        inflater: LayoutInflater, container: ViewGroup?,
        savedInstanceState: Bundle?
    ): View? {
        // Inflate the layout for this fragment
        return inflater.inflate(R.layout.fragment_main_sheet, container, false)
    }

}


// MainFragment.kt

        override fun onBindViewHolder(holder: ViewHolderMain, position: Int) {

            holder.mainRowBinding.textViewMainRowTitle.text = memoList[position].title

            holder.mainRowBinding.root.setOnClickListener {
                // BottomSheet를 띄워준다.
                val mainSheetFragment = MainSheetFragment()
                mainSheetFragment.show(mainActivity.supportFragmentManager, "BottomSheet")
            }
        }

항목을 클릭하면

bundle 사용

항목을 클릭할때 해당 항목의 idx를 전달하는 방법은 다른 fragment와 똑같이 bundle을 사용하면 된다.

// MainFragment.kt

        override fun onBindViewHolder(holder: ViewHolderMain, position: Int) {

            holder.mainRowBinding.textViewMainRowTitle.text = memoList[position].title

            holder.mainRowBinding.root.setOnClickListener {
                // BottomSheet를 띄워준다.
                val mainSheetFragment = MainSheetFragment()

                // position번째 객체를 추출한다.
                val sheetBundle = Bundle()
                sheetBundle.putInt("memoIdx", memoList[position].idx)
                mainSheetFragment.arguments = sheetBundle

                mainSheetFragment.show(mainActivity.supportFragmentManager, "BottomSheet")
            }
        }
        
// MainSheetFragment.kt
class MainSheetFragment : BottomSheetDialogFragment() {

    lateinit var fragmentMainSheetBinding: FragmentMainSheetBinding
    lateinit var mainActivity: MainActivity

    lateinit var memo:MemoModel

    override fun onCreateView(
        inflater: LayoutInflater, container: ViewGroup?,
        savedInstanceState: Bundle?
    ): View? {
        // Inflate the layout for this fragment

        fragmentMainSheetBinding = FragmentMainSheetBinding.inflate(inflater)
        mainActivity = activity as MainActivity

        settingData()
        settingView()
        settingEvent()

        return fragmentMainSheetBinding.root
    }

    fun settingData(){
        val memoIdx = arguments?.getInt("memoIdx")!!
        memo = MemoDAO.selectOneMemo(mainActivity,memoIdx)
    }

    fun settingView(){
        fragmentMainSheetBinding.apply {
            textViewSheetSubject.text = memo.title
            textViewSheetText.text = memo.content
        }
    }

    fun settingEvent(){
        fragmentMainSheetBinding.apply {
            buttonSheetDelete.setOnClickListener {
                // 메모 삭제
                MemoDAO.deleteMemo(mainActivity,memo.idx)
                // 메모 데이터를 읽어온다.
                mainActivity.reloadRecyclerView()
                // 다이얼로그를 내려준다
                dismiss()
            }
        }
    }

}

메모 삭제 후 MainFragment의 리사이클러뷰를 갱신해줘야 하는데
MainFragment에 갱신 해주는 메서드를 작성해주고 MainActivity에서 해당 메서드를 호출하는 메서드를 또 작성한다.
메모 삭제 시 MainActivity에서 작성한 메서드를 호출




※ 출처 : 멋쟁이사자 앱스쿨 2기, 소프트캠퍼스 
profile
안드로이드공부

0개의 댓글