I am getting data from the firebase from starting to end by sequence and I want to show the data randomly but I am having issue to shuffle the data coming from the firebase. I am getting data from the firebase from starting to end by sequence and I want to show the data randomly but I am having issue to shuffle the data coming from the firebase. Here is my code to understand it better.
Main Activity:
class MainActivity : AppCompatActivity() {
lateinit var viewPager2:ViewPager2
lateinit var adapter:VideoAdapter
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_main)
/**set fullscreen*/
window.setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN,
WindowManager.LayoutParams.FLAG_FULLSCREEN)
/**set find id*/
viewPager2 = findViewById(R.id.vpager)
/**set database*/
val mDataBase = Firebase.database.getReference("videos")
val options = FirebaseRecyclerOptions.Builder<VideoModel>()
.setQuery(mDataBase,VideoModel::class.java)
.build()
/**set adapter*/
adapter = VideoAdapter(options)
viewPager2.adapter = adapter
}
override fun onStart() {
super.onStart()
adapter.startListening()
}
override fun onStop() {
super.onStop()
adapter.stopListening()
}
}
VideoAdapter
class VideoAdapter(options: FirebaseRecyclerOptions<VideoModel?>) :
FirebaseRecyclerAdapter<VideoModel?, VideoAdapter.MyViewHolder?>(options) {
override fun onBindViewHolder(holder: MyViewHolder, position: Int, model: VideoModel) {
holder.setdata(model)
}
override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): MyViewHolder {
val view: View = LayoutInflater.from(parent.context).inflate(R.layout.single_video_row, parent, false)
return MyViewHolder(view)
}
inner class MyViewHolder(itemView: View) : RecyclerView.ViewHolder(itemView) {
var videoView: VideoView
var title: TextView
var desc: TextView
var pbar: ProgressBar
var fav :ImageView
var isFav = false
fun setdata(obj: VideoModel) {
videoView.setVideoPath(obj.url)
title.setText(obj.title)
desc.setText(obj.desc)
videoView.setOnPreparedListener { mediaPlayer ->
pbar.visibility = View.GONE
mediaPlayer.start()
}
videoView.setOnCompletionListener { mediaPlayer -> mediaPlayer.start() }
fav.setOnClickListener {
if (!isFav){
fav.setImageResource(R.drawable.ic_fill_favorite)
isFav = true
}
else{
fav.setImageResource(R.drawable.ic_favorite)
isFav = false
}
}
}
init {
videoView = itemView.findViewById<View>(R.id.videoView) as VideoView
title = itemView.findViewById<View>(R.id.textVideoTitle) as TextView
desc = itemView.findViewById<View>(R.id.textVideoDescription) as TextView
pbar = itemView.findViewById<View>(R.id.videoProgressBar) as ProgressBar
fav = itemView.findViewById(R.id.favorites) as ImageView
count = itemView.findViewById(R.id.count) as TextView
}
}
}
VideoModel
data class VideoModel(
var title:String?=null,
var desc:String?=null,
var url:String?=null
)