I have created a Recyclerview that accepts data from firebase. While it is loading I want to show a progress bar in the recyclerview. All the blogs are suggesting Paginated Recyclerview or infinite scrollable reclyerview, but I want only one progress bar which loads only one time. Like This : WhatsApp Progressbar.
I used diffrent ways to do it. But nothing is working properly. This is my RecyclerView activity:
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)
}
}
And this is my adapter class:
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)
}
}