微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

显示进度条,直到数据放入适配器

如何解决显示进度条,直到数据放入适配器

我正在一个项目中与 FirebaseRecyclerView 合作。在这里,我从 firebase 获取一些数据到适配器中,并在 RecyclerView 中显示它们。它工作正常,但因为从 firebase 获取数据需要时间。所以我使用了一个可见的进度条,直到从 firebase 检索数据。但是这里有一个问题,当数据在适配器中设置它们的位置时它是不可见的。

这是一个Video

代码在这里

 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 举报,一经查实,本站将立刻删除。