hyeals study
인스타그램 클론 (알람 리스트 페이지) 본문
- 알림 메세지를 띄워주는 기능 추가
[1] fragment_alarm.xml로 이동해서 아래와 같이 레이아웃을 만듦
[2] AlarmFragment로 이동해서 RecyclerViewAdapter를 만듦 (여기서는 AlarmRecyclerviewAdpater)
- 아래와 같이 inner클래스로 AlarmRecyclerviewAdpater 클래스를 만들어줌
inner class AlarmRecyclerviewAdpater : RecyclerView.Adapter<RecyclerView.ViewHolder>(){
var alarmDTOList: ArrayList<AlarmDTO> = arrayListOf()
init{
val uid = FirebaseAuth.getInstance().currentUser?.uid
FirebaseFirestore.getInstance().collection("alarms").whereEqualTo("destinationUid", uid)
.addSnapshotListener { querySnapshot, firebaseFirestoreException ->
alarmDTOList.clear()
if(querySnapshot == null) return@addSnapshotListener
for (snapshot in querySnapshot.documents) {
alarmDTOList.add(snapshot.toObject(AlarmDTO::class.java)!!)
}
alarmDTOList.sortByDescending { it.timestamp }
notifyDataSetChanged()
}
}
override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): RecyclerView.ViewHolder {
var view = LayoutInflater.from(parent.context).inflate(R.layout.item_comment,parent,false)
return CustomViewHolder(view)
}
inner class CustomViewHolder(view: View): RecyclerView.ViewHolder(view)
override fun getItemCount(): Int {
return alarmDTOList.size
}
override fun onBindViewHolder(holder: RecyclerView.ViewHolder, position: Int) {
var view = holder.itemView
FirebaseFirestore.getInstance().collection("profileImages").document(alarmDTOList[position].uid!!).get().addOnCompleteListener { task ->
if(task.isSuccessful){
val url = task.result!!["image"]
Glide.with(view.context).load(url).apply(RequestOptions().circleCrop()).into(view.commentviewitem_imageview_profile)
}
}
when(alarmDTOList[position].kind){
0 -> {
val str_0 = alarmDTOList[position].userId + getString(R.string.alarm_favorite)
view.commentviewitem_textview_profile.text = str_0
}
1 -> {
val str_0 = alarmDTOList[position].userId + " " + getString(R.string.alarm_comment) + " of " + alarmDTOList[position].message
view.commentviewitem_textview_profile.text = str_0
}
2 -> {
val str_0 = alarmDTOList[position].userId + " " + getString(R.string.alarm_follow)
view.commentviewitem_textview_profile.text = str_0
}
}
view.commentviewitem_textview_comment.visibility = View.INVISIBLE
}
}
[ 코드 설명 ]
- 알람을 저장하는 리스트 변수
- 아이템 디자인을 불러옴 (여기서 item_commet.xml 디자인을 재활용함)
- 종류에 따라 메세지를 다르게 표시할 수 있도록 하는 코드를 추가함
- userId: 누가 좋아요를 눌렀는지, 누가 댓글을 달았는지, 누가 팔로우를 했는지
- kind=0: 좋아요 알람 리스트
- kind=1: 댓글 알람
- kind=2: 팔로우 알람
- 어댑터가 생성될 때 데이터베이스를 읽어오도록 하는 부분
- destinationUid가 현재 사용자인 경우의 정보들(메세지들)만 필터링함
- 필터링한 데이터들을 스냅샷을 이용해서 데이터베이스로부터 AlarmDTO로 캐스팅해서 alarmDTOList에 추가함
- notifyDataSetChanged(): Recyclerview를 새로고침해줌
- 어댑터와 recyclerview를 연결시키고, recyclerview를 어느 방향으로 배치시킬지 LinearLayoutManager를 통해 정함 (여기서는 세로로 배치함)
- 데이터 베이스의 profileImages에 접근한 후, 댓글을 단 상대방의 uid를 document에 넣어서 상대방 프로필 이미지 주소를 받아옴
- 얻어온 값을 Glide를 이용해서 다운로드함
[3] 프로젝트를 실행시킨 후 아래에 하트 모양 아이콘을 누르면 알람 리스트를 확인할 수 있음
자세한 내용은 인프런 하울의 안드로이드 인스타그램 클론 만들기 강의를 참고
'안드로이드' 카테고리의 다른 글
webView 사용해보기 (0) | 2020.05.11 |
---|---|
RecyclerView 사용법 (0) | 2020.05.11 |
인스타그램 클론 (알림 이벤트) (0) | 2020.04.14 |
인스타그램 클론 (댓글 페이지) (0) | 2020.04.13 |
인스타그램 클론 (사진 페이지) (0) | 2020.04.10 |