안드로이드(코틀린) 채팅앱 만들기 - CattingFragment 2

박준식·2022년 9월 5일
0

Catting

목록 보기
7/8
이번에는 CattingFragment에서 채팅창 리스트를 띄우기위해 사용한 RecyclerView를 사용하는 방법을 알아보자

1. 전체 코드

안드로이드(코틀린) 채팅앱 만들기 - CattingFragment 1

2. 정리

  • Recycler Adapter 만들기
  • class CatAdapter(val listData: ArrayList<CatProfile>, val logHelper: ChattingLogHelper) : RecyclerView.Adapter<CatAdapter.Holder>(){
        inner class Holder(val binding: ItemChattingCatListBinding): RecyclerView.ViewHolder(binding.root){
            fun setCatProfile(catProfile: CatProfile){
                val decodedString = Base64.decode(catProfile.cPicture, Base64.DEFAULT)
                val decodedByte = BitmapFactory.decodeByteArray(decodedString, 0, decodedString.size)
                with(binding){
                    cName.text = catProfile.cName
                    chattingInfo.setOnClickListener {
                        MainActivity.getInstance()?.openChattingActivity(catProfile)
                    }
                    cImage.setImageBitmap(decodedByte)
                    cImage.clipToOutline = true
                }
            }
        }
    
        override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): Holder {
            val binding = ItemChattingCatListBinding.inflate(LayoutInflater.from(parent.context),parent,false)
            return Holder(binding)
        }
    
        override fun onBindViewHolder(holder: Holder, position: Int) {
            Log.d("ChattingFragment", "${listData[position]}")
            val catProfile = listData[position]
            holder.setCatProfile(catProfile)
        }
    
        override fun getItemCount() = listData.size
    }
    1. Recycler View는 Adapter를 통해 출력할 아이템의 리스트와 출력 형식을 지정 받는다.
    2. Adapter는 RecyclerView.Adapter를 상속받아야 한다. 이때 ViewHolder가 필요한데 이는 Adpater 클래스안에 inner 클래스 형태로 생성하면 된다. inner 클래스로 생성하면 Adapter 클래스의 변수를 사용할 수 있다.
    3. ViewHolder에는 Recycler View의 아이템을 생성하는 방법을 정의하는 함수가 포함된다. 일반적으로 class의 생성시 받은 View Binding과 함수 호출시 받은 아이템의 정보를 담은 변수로 아이템을 생성한다.
    4. onCreateViewHolder는 binding을 통해 Holder를 인스턴스화 한다.
    5. onBindViewHolder는 순서대로 아이템을 생성한다.
    6. getItemCount는 아이템 리스트의 크기를 반환한다.

  • Recycler View에 Adapter 연결하기
  •     override fun onResume() {
            super.onResume()
            if(MainActivity.isChattingFragmentNeedRefresh){
                catList = mainActivity.userInfo.cats
                binding.chattingRecycler.layoutManager = LinearLayoutManager(mainActivity,LinearLayoutManager.VERTICAL,false)
                binding.chattingRecycler.adapter = CatAdapter(catList, logHelper)
                MainActivity.isChattingFragmentNeedRefresh = false
            }
      	}
    1. onResume은 해당 Fragment가 다시 실행될 때 호출된다. 다른 화면에서 바뀐 데이터가 있으면 Recycler View를 다시 그려야 하므로 해당 주기에 작성하였다.
    2. Recycler View의 layoutManager를 먼저 연결한다. 이때 context를 넣어야 하는데 Fragment는 context가 따로 없기에 해당 Fragment를 실행한 MainActivity의 context를 넣었다.
    3. 그 후 아이템 리스트를 포함한 정보로 생성한 adpater를 연결한다.

3. 주의사항

0개의 댓글