如何解决显示进度条,直到数据放入适配器
我正在一个项目中与 Firebase
和 RecyclerView
合作。在这里,我从 firebase 获取一些数据到适配器中,并在 RecyclerView 中显示它们。它工作正常,但因为从 firebase 获取数据需要时间。所以我使用了一个可见的进度条,直到从 firebase 检索数据。但是这里有一个问题,当数据在适配器中设置它们的位置时它是不可见的。
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_messenger)
progress_circular_chat.visibility = VISIBLE // here it goes visible
nested_sv_chat.visibility = GONE
retrieveChatList()
}
private fun retrieveChatList() {
usersChatList = ArrayList()
val userRef = dbRef.child("ChatList").child(currentUserID)
userRef.addValueEventListener(object : ValueEventListener
{
override fun onCancelled(error: DatabaseError) {
}
override fun onDataChange(snapshot: DataSnapshot)
{
(usersChatList as ArrayList<String>).clear()
if (snapshot.exists()){
for (dataSnapshot in snapshot.children){
val userUid = dataSnapshot.key
if (userUid != null) {
(usersChatList as ArrayList<String>).add(userUid)
}
}
readChatList()
}
retrieveGroupChatList()
}
})
}
private fun readChatList() {
mUsers = ArrayList()
val userRef = FirebaseFirestore.getInstance().collection("Users")
userRef.get()
.addOnSuccessListener { queryDocumentSnapshots ->
mUsers?.clear()
for (documentSnapshot in queryDocumentSnapshots) {
val user = documentSnapshot.toObject(User::class.java)
for (id in usersChatList!!){
if (user.getUid() == id){
(mUsers as ArrayList<User>).add(user)
}
}
}
chatlistadapter?.notifyDataSetChanged()
chatlistadapter = Chatlistadapter(this,(mUsers as ArrayList<User>),true)
recyclerViewChatList.adapter = chatlistadapter
}.addOnFailureListener { e -> }
}
private fun retrieveGroupChatList() {
//same code as readChatList for group chats
progress_circular_chat.visibility = GONE // here it goes invisible
nested_sv_chat.visibility = VISIBLE
}
这里是xml代码
<ProgressBar
android:id="@+id/progress_circular_chat"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="center"
android:layout_centerInParent="true"
android:indeterminate="true"
android:visibility="gone"
android:progresstint="@color/button_color"/>
<androidx.core.widget.nestedScrollView
android:id="@+id/nested_sv_chat"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:scrollbars="none"
android:fillViewport="true"
android:overScrollMode="never">
<androidx.recyclerview.widget.RecyclerView
android:id="@+id/recyclerView_chatList_group"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:overScrollMode="never"
android:nestedScrollingEnabled="false"/>
<androidx.recyclerview.widget.RecyclerView
android:id="@+id/recyclerView_chatList"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:overScrollMode="never"
android:nestedScrollingEnabled="false"/>
</androidx.core.widget.nestedScrollView>
解决方法
当您将 ProgressBar
可见性设置为 VISIBLE
的同时,将 RecyclerView
可见性设置为 GONE
。然后,当加载完成后,只需将 ProgressBar
可见性设置为 GONE
,将 RecyclerView
可见性设置为 VISIBLE
。
你这样做的方式,即使我没有看到你的 XML 代码,你只是在显示你的进度条,但由于你的 RecyclerView,它不可见。加载数据时,RecyclerView 会进行轻微的状态刷新,允许 ProgressBar 可见一秒钟,但它又消失了。
编辑:
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_messenger)
progress_circular_chat.visibility = View.VISIBLE
recyclerViewChatList.visibility = View.GONE //THIS LINE IS ADDED !!!!!!!!!!!!!!!!!!
readChatList()
}
private fun readChatList() {
mUsers = ArrayList()
val userRef = FirebaseFirestore.getInstance().collection("Users")
userRef.get()
.addOnSuccessListener { queryDocumentSnapshots ->
mUsers?.clear()
for (documentSnapshot in queryDocumentSnapshots) {
val user = documentSnapshot.toObject(User::class.java)
for (id in usersChatList!!){
if (user.getUid() == id){
(mUsers as ArrayList<User>).add(user)
}
}
}
chatListAdapter?.notifyDataSetChanged()
chatListAdapter = ChatListAdapter(this,(mUsers as ArrayList<User>),true)
recyclerViewChatList.adapter = chatListAdapter
progress_circular_chat.visibility = View.GONE
recyclerViewChatList.visibility = View.VISIBLE //THIS LINE IS ADDED !!!!!!!!!!!!!!!!!!!!!!
}.addOnFailureListener { e ->
progress_circular_chat.visibility = View.GONE
}
}
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。