问题描述
我创建了一个 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}")
}
}
}