如何在加载 recyclerview 之前显示进度条?

问题描述

我创建了一个 Recyclerview,它接受来自 firebase 的数据。在加载时,我想在 recyclerview 中显示一个进度条。所有的博客都建议分页 Recyclerview 或无限滚动 reclyerview,但我只想要一个只加载一次的进度条。像这样:WhatsApp Progressbar

我使用了不同的方法来做到这一点。但没有任何工作正常。这是我的 RecyclerView 活动:

class Repeateractivity : AppCompatActivity(),OnChapterClickedListener {

    lateinit var recyclerview: RecyclerView
    private var repeateradapter: repeater_adapter? = null
    private var firebaseRepo : Repeater_Firebase_Repo = Repeater_Firebase_Repo()
    private var item : ArrayList<Data_Source> = ArrayList()

    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        setContentView(R.layout.activity_repeater)
        val repeatername = intent.getStringExtra("repeaterName")
        setSupportActionBar(findViewById(R.id.toolbar_repeater))

        supportActionBar?.apply {
            setdisplayHomeAsUpEnabled(true)
            setdisplayShowHomeEnabled(true)
            setTitle(repeatername)
        }


        recyclerview = findViewById(R.id.repeater_recycler) as RecyclerView
        initRecyclerView()
        loadData()

    }

    private fun initRecyclerView() {

        recyclerview.apply {
            layoutManager = linearlayoutmanager(this@Repeateractivity)
            repeateradapter = repeater_adapter(item,this@Repeateractivity)
            adapter = repeateradapter

        }


    }


    private fun loadData(){
        firebaseRepo.getchapter().addOnCompleteListener{
            if (it.isSuccessful){
                item = it.result!!.toObjects(Data_Source::class.java) as ArrayList<Data_Source>
                repeateradapter?.items  = item
                repeateradapter?.notifyDataSetChanged()

            }

            else{
                Log.d(TAG,"Error: ${it.exception!!.message}")
            }
        }
    }


    override fun OnClickItem(position: Int,items: ArrayList<Data_Source>) {
        val intent = Intent(this,RepeaterChapteractivity::class.java)
        intent.putExtra("itemname",items[position].name)
        intent.putExtra("itemdescription",items[position].description)
        intent.putExtra("itemimage",items[position].image)
        intent.putExtra("itemvideo",items[position].video)
        startActivity(intent)

    }


}

这是我的适配器类:

class repeater_adapter(
        var items: ArrayList<Data_Source>,private val clickListener: OnChapterClickedListener) :
    RecyclerView.Adapter<repeater_viewholder>() {


    override fun onCreateViewHolder(parent: ViewGroup,viewType: Int): repeater_viewholder {
        val view = LayoutInflater.from(parent.context).inflate(R.layout.item,parent,false)
        val viewholder = repeater_viewholder(view)
        return viewholder

    }

    override fun onBindViewHolder(holder: repeater_viewholder,position: Int) {

        holder.bind(items.get(position))


        holder.itemView.setonClickListener{

            clickListener.OnClickItem(position,items)

        }
    }

    override fun getItemCount(): Int {
        return items.size
    }

}

class repeater_viewholder(itemview: View) : RecyclerView.ViewHolder(itemview){


    val titleview : TextView = itemview.findViewById(R.id.itemtext)
    val imageview = itemview.findViewById<ImageView>(R.id.itemimage)

    fun bind(dataSource: Data_Source){
        titleview.setText(dataSource.name)
        Glide.with(itemView.context).load(dataSource.image).into(imageview)

    }

}

解决方法

在您的活动/片段布局中添加进度条

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent" android:layout_height="match_parent">

    <androidx.recyclerview.widget.RecyclerView
        android:layout_width="match_parent"
        android:layout_height="match_parent"/>
    
    <ProgressBar
        android:layout_centerInParent="true"
        android:id="@+id/progress_bar"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"/>
</RelativeLayout>

然后当你完成获取数据时隐藏进度条

private fun loadData(){
        firebaseRepo.getchapter().addOnCompleteListener{
            progressBar.setVisiblity(View.GONE)l
            if (it.isSuccessful){
                item = it.result!!.toObjects(Data_Source::class.java) as ArrayList<Data_Source>
                repeaterAdapter?.items  = item
                repeaterAdapter?.notifyDataSetChanged()

            }

            else{
                Log.d(TAG,"Error: ${it.exception!!.message}")
            }
        }
    }

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...