


어플리케이션 처음 실행 시 메인 화면에서 버튼을 처음 클릭하면 왼쪽과 같이 리사이클러뷰에 아무 내용이 없이 나오다가 메인화면으로 뒤로가기 후 다시 버튼 클릭 시 오른쪽같이 파이어베이스 DB내용이 리사이클러뷰에 제대로 반영이 되는데 왜이러는 건가요? 처음 어플리케이션 실행 시 오른쪽 그림 같이 DB에 즉시 적용되서 나오고 싶습니다.
코틀린으로 작성했습니다.
class list_test : AppCompatActivity() {
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_list_test)
//임시 Date 배열로 저장
val example = arrayListOf<Date>()
example.clear()
val database : FirebaseDatabase = FirebaseDatabase.getInstance()
for( i in 1..3){
val myRef: DatabaseReference = database.getReference("List").child("list$i")
myRef.addValueEventListener(object : ValueEventListener {
override fun onDataChange(dataSnapshot: DataSnapshot) {
val value = dataSnapshot?.value
example.add(Date("$value", 2022))
}
override fun onCancelled(p0: DatabaseError) {
println("Failed to read value.")
}
})
}
recycler_view.apply {
layoutManager = LinearLayoutManager(this@list_test)
adapter = DateAdapter(example){ date ->
//확인용 Toast
Toast.makeText(this@list_test, "$date",Toast.LENGTH_SHORT).show()
}
}
}
}
//Adapter 설정
class DateAdapter(val items: List<Date>, private val clickListener: (date: Date) -> Unit) :
RecyclerView.Adapter<DateAdapter.DateViewHolder>(){
//ViewHolder 설정
class DateViewHolder(var binding: ItemDateBinding): RecyclerView.ViewHolder(binding.root)
override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): DateViewHolder {
val view = LayoutInflater.from(parent.context)
.inflate(R.layout.item_date, parent, false)
val viewHolder = DateViewHolder(ItemDateBinding.bind(view))
view.setOnClickListener {
clickListener.invoke(items[viewHolder.adapterPosition])
}
return viewHolder
}
override fun onBindViewHolder(holder: DateViewHolder, position: Int) {
holder.binding.date = items[position]
}
override fun getItemCount(): Int = items.size
}