【发布时间】:2018-08-26 19:55:20
【问题描述】:
我正在尝试在回收站视图中显示一个片段。当你第一次加载片段并返回你得到的视图时:E/RecyclerView: No adapter attached; skipping layout. 这是因为我实际上一开始并没有附加适配器。我在一个名为createFirebaseListener() 的函数中调用适配器,该函数监听数据库的更改并实时更新recyclerview。代码如下:
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 中填充recyclerview?
【问题讨论】:
-
重点是,你在哪里初始化了
mainActivityRecyclerView?我在你的代码中看不到它.. -
在
import com.ntx_deisgns.cyberchatter.cyberchatter.R中初始化。mainActivityRecyclerView这个名字是我recyclerview的id。
标签: android android-fragments android-recyclerview kotlin