android - 如何在加载recyclerview之前显示进度条?
问题描述
我创建了一个接受来自 firebase 的数据的 Recyclerview。在加载时,我想在 recyclerview 中显示一个进度条。所有的博客都建议分页 Recyclerview 或无限可滚动的 recyclerview,但我只想要一个只加载一次的进度条。像这样:WhatsApp 进度条。
我用不同的方法来做到这一点。但没有任何工作正常。这是我的 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}")
}
}
}
推荐阅读
- python - 将数值数组格式化为类似字符串的数组
- node.js - 使用 superagent 发出请求时出现 Node.js 错误
- c# - 窗口窗体 TextBox 没有从 datagridview 分配任何值
- node.js - 以编程方式运行 knex 种子:运行
- angular - Angular HTTP.jsonp Uncaught SyntaxError: Unexpected token :"
- bash - 使用 sed/bash 替换 YAML 文件中的项目
- react-native - react native 在不同兄弟姐妹的两个场景之间导航
- c - 什么是值传递和引用传递?
- c++ - 具有非整数边缘容量的最大流量 Dinic 算法
- java - Servlet 加载属性文件