Android/Side Projects

당근마켓 앱 개발하기

화요밍 2022. 2. 20. 19:55
728x90
반응형
Side Proeject - Carrot Market
중고 거래 앱 당근 마켓의 간단한 기능을 구현한 프로젝트

 

 

GitHub - hwayeon351/CarrotMarket

Contribute to hwayeon351/CarrotMarket development by creating an account on GitHub.

github.com


학습 회고

오늘은 중고거래 앱 홈 화면에 Firebase Realtime Database에 저장된 거래 아이템들의 정보를 가져와 RecyclerView에 적용해주었다.

또한, FloatingActionButton을 추가해서 버튼을 클릭하면 새 아이템을 등록하는 AddArticleActivity가 실행되도록 구현하였다.


오늘 공부한 내용

  • FloatingActionBotton(FAB)

Floating Action Button은 앱 화면에 살짝 떠있는 원형 버튼이다.

중고 거래 앱에서 아이템 추가 버튼으로 FAB를 만들어 주었다.

<com.google.android.material.floatingactionbutton.FloatingActionButton
    android:id="@+id/addFloatingButton"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:layout_margin="16dp"
    android:backgroundTint="@color/orange"
    android:src="@drawable/ic_baseline_add_24"
    app:layout_constraintBottom_toBottomOf="parent"
    app:layout_constraintEnd_toEndOf="parent"
    app:tint="@color/white" />

 

클릭 이벤트는 버튼과 유사하게 setOnClickListener를 FAB에 달아주면 된다.

fragmentHomeBinding.addFloatingButton.setOnClickListener {
    context?.let {

        if (auth.currentUser != null) {
            val intent = Intent(it, AddArticleActivity::class.java)
            startActivity(intent)
        } else {
            Snackbar.make(view, "로그인 후 사용해주세요.", Snackbar.LENGTH_LONG).show()
        }

    }
}

로그인이 되어 있지 않은 경우, 새 아이템을 추가할 수 없도록 막기 위해 Snackbar를 띄워주었다.

 

 

  • Firebase Realtime Database에서 데이터 가져오기

HomeFragment에서 거래 아이템 목록을 보여주는 RecyclerView에 Firebase Realtime Database에서 추가된 데이터를 불러와 적용하였다.

이때, Articles 하위에 새로운 아이템 목록이 추가되면 데이터를 받아와 추가해주기 위해 Articles 데이터베이스 레퍼런스에 ChildEventListener를 붙여주었다.

private val listener = object: ChildEventListener {
    override fun onChildAdded(snapshot: DataSnapshot, previousChildName: String?) {

        val articleModel = snapshot.getValue(ArticleModel::class.java)
        articleModel ?: return

        articleList.add(articleModel)
        articleAdapter.submitList(articleList)
    }

    override fun onChildChanged(snapshot: DataSnapshot, previousChildName: String?) {}

    override fun onChildRemoved(snapshot: DataSnapshot) {}

    override fun onChildMoved(snapshot: DataSnapshot, previousChildName: String?) {}

    override fun onCancelled(error: DatabaseError) {}

}
    override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
        articleDB.addChildEventListener(listener)
    }

    override fun onResume() {
        super.onResume()

        articleAdapter.notifyDataSetChanged()
    }

    override fun onDestroyView() {
        super.onDestroyView()

        articleDB.removeEventListener(listener)
    }

처음에 HomeFragment가 인스턴스화 될 때 ChildEventListener를 붙여주었다.

이후, BottomNavigationBar를 통해 다른 메뉴로 이동하였다가 다시 홈 화면으로 돌아올 때에 바뀐 데이터를 RecyclerView에 적용해주기 위해서 onResume()이 호출되었을 때 어댑터에 notifyDataSetChanged()를 호출해주었다.

그리고 HomeFragment가 종료되기 전에 리스너를 Remove 해주었다.

 

 

728x90
반응형

'Android > Side Projects' 카테고리의 다른 글

당근마켓 앱 개발하기  (0) 2022.02.22
당근마켓 앱 개발하기  (0) 2022.02.21
당근마켓 앱 개발하기  (1) 2022.02.19
Tinder 앱 개발하기  (0) 2022.02.18
Tinder 앱 개발하기  (0) 2022.02.17