Я пытаюсь отобразить фрагмент в представлении переработчика.Когда вы впервые загружаете фрагмент и возвращаете представление, вы получаете: E/RecyclerView: No adapter attached; skipping layout.
Это потому, что на самом деле у меня нет подключенного адаптера вначале.Я вызываю адаптер в функции под названием createFirebaseListener()
, которая прослушивает изменения в базе данных и обновляет обзор реселлера в режиме реального времени.Вот код:
override fun onCreateView(inflater: LayoutInflater, container: ViewGroup?, savedInstanceState: Bundle?): View {
val view = inflater.inflate(R.layout.groups, container, false)
createFirebaseListener()
setupSendButton(view)
return view
}
private fun createFirebaseListener(){
val postListener = object : ValueEventListener {
override fun onDataChange(dataSnapshot: DataSnapshot) {
val toReturn: ArrayList<Message> = ArrayList();
for(data in dataSnapshot.children){
val messageData = data.getValue<Message>(Message::class.java)
//unwrap
val message = messageData?.let { it } ?: continue
toReturn.add(message)
}
//sort so newest at bottom
toReturn.sortBy { message ->
message.timestamp
}
setupAdapter(toReturn)
}
override fun onCancelled(databaseError: DatabaseError) {
//log error
}
}
mDatabase?.child("Group Chat")?.addValueEventListener(postListener)
}
private fun setupAdapter(data: ArrayList<Message>){
val linearLayoutManager = LinearLayoutManager(context)
mainActivityRecyclerView.layoutManager = linearLayoutManager
mainActivityRecyclerView.adapter = MessageAdapter(data){
Log.d("we.", "got here!")
}
//scroll to bottom
mainActivityRecyclerView.scrollToPosition(data.size - 1)
}
Как вы можете видеть, в setupAdapter я обновляю представление рециркулятора каждый раз, когда приходит новое сообщение.Поскольку я не получаю сообщения при загрузке фрагмента, я получаю сообщение об ошибке выше при загрузке фрагмента.Но это также приводит к сбою приложения, если я изменю ориентацию на альбомную или если я загружаю другой фрагмент, а затем возвращаюсь к этому фрагменту: java.lang.IllegalStateException: mainActivityRecyclerView must not be null
.
Как мне лучше всего справиться с заполнением окна повторного просмотра в onCreateView
?