2021.05.31 - [안드로이드/개발] - [Android 개발일지] MVVM 패턴으로 Todo, Done List 만들기 - (5) 데이터바인딩, 메모, 오류 수정
에서 이어지는 글입니다.
1️⃣ DoneList
todolist를 만들때와 동일하게 만들면 된다.
Dao
// 완료한 메모만 출력
@Query("SELECT * FROM Memo WHERE `check` = 1 ORDER BY year DESC, month DESC, day DESC, id DESC")
fun readDoneData() : Flow<List<Memo>>
기존의 모든 데이터를 읽는 쿼리문과 유사하게 작성하면서,
WHERE로 조건을 체크되어 있는 것만 출력하도록 한다.
Repository
val readDoneData : Flow<List<Memo>> = memoDao.readDoneData()
ViewModel
val readDoneData : LiveData<List<Memo>>
추가해주고
DoneListFragment
class DoneListFragment : Fragment() {
private var binding : FragmentDoneListBinding? = null
private val memoViewModel: MemoViewModel by viewModels() // 뷰모델 연결
private val adapter : TodoAdapter by lazy { TodoAdapter(memoViewModel) } // 어댑터 선언
override fun onCreateView(
inflater: LayoutInflater, container: ViewGroup?,
savedInstanceState: Bundle?
): View? {
// Inflate the layout for this fragment
// 뷰바인딩
binding = FragmentDoneListBinding.inflate(inflater,container,false)
// 아이템에 아이디를 설정해줌 (깜빡이는 현상방지)
adapter.setHasStableIds(true)
// 아이템을 가로로 하나씩 보여주고 어댑터 연결
binding!!.doneRecyclerView.layoutManager = LinearLayoutManager(activity, LinearLayoutManager.VERTICAL,false)
binding!!.doneRecyclerView.adapter = adapter
// 리스트 관찰하여 변경시 어댑터에 전달해줌
memoViewModel.readDoneData.observe(viewLifecycleOwner, Observer {
adapter.setData(it)
})
return binding!!.root
}
}
readDoneData를 관찰하게하여 변경된 값을 어댑터에 넘겨주도록 한다.
기존의 Todolist화면에서
Donelist 화면을 선택하면 완료한 메모만 보여주는 것을 알 수 있다.
2️⃣ 마무리
서치바는 필요없다고 판단되어 제거하였다.
아이콘을 만들어주었다.
이제 전체적인 개발이 끝났으며 마지막으로 정리하는 시간을 가지려고 한다.
https://github.com/HanYeop/TodoneList