I want to go to a new fragment with the details of this object when clicking on the recycler view object. recycler view is also a fragment, the data is stored in firebase. How should I do this?
RecyclerView.Adapter
class MyAdapter() : RecyclerView.Adapter<MyAdapter.MyViewHolder>() {
val dataList = ArrayList<MoviesData>()
var onItemClick: ((MoviesData) -> Unit)? = null
override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): MyViewHolder {
val view = LayoutInflater.from(parent.context).inflate(
R.layout.recycler_item,
parent, false
)
return MyViewHolder(view)
}
fun updateMoviesList(movList: List<MoviesData>){
this.dataList.clear()
this.dataList.addAll(movList)
notifyDataSetChanged()
}
override fun getItemCount(): Int {
return dataList.size
}
override fun onBindViewHolder(holder: MyViewHolder, position: Int) {
val currentItem = dataList[position]
Glide.with(holder.movieImg).load(currentItem.movieImage).into(holder.movieImg)
holder.movieDuration.text = currentItem.movieDuration.toString()
holder.movieGenre.text = currentItem.movieGenre
holder.movieTitle.text = currentItem.movieTitle
holder.movieWatch.text = currentItem.movieWatch.toString()
holder.itemView.setOnClickListener{
onItemClick?.invoke(dataList[position])
}
}
inner class MyViewHolder(itemView: View): RecyclerView.ViewHolder(itemView) {
val movieImg: ImageView = itemView.findViewById(R.id.movieImg)
val movieTitle : TextView = itemView.findViewById(R.id.movieTitle)
val movieDuration : TextView = itemView.findViewById(R.id.movieDuration)
val movieGenre : TextView = itemView.findViewById(R.id.movieGenre)
val movieWatch : TextView = itemView.findViewById(R.id.movieWatch)
}
}
MoviesList (first Fragment)
class MoviesList : Fragment() {
override fun onCreateView(
inflater: LayoutInflater, container: ViewGroup?,
savedInstanceState: Bundle?
): View? {
return inflater.inflate(R.layout.fragment_movies_list, container, false)
}
override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
super.onViewCreated(view, savedInstanceState)
movieRecyclerView = view.findViewById(R.id.recyclerView)
movieRecyclerView.layoutManager = LinearLayoutManager(context)
movieRecyclerView.setHasFixedSize(true)
adapter = MyAdapter()
movieRecyclerView.adapter = adapter
viewModel = ViewModelProvider(this)[MovieViewModel::class.java]
viewModel.allMovies.observe(viewLifecycleOwner, Observer {
adapter.updateMoviesList(it)
})
}
}
MainActivity
class MainActivity : AppCompatActivity() {
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_main)
replaceFragment(MoviesList())
}
private fun replaceFragment(fragment: Fragment){
val fragmentManager = supportFragmentManager
val fragmentTransaction = fragmentManager.beginTransaction()
fragmentTransaction.replace(R.id.frame_layout, fragment)
fragmentTransaction.commit()
}
}
I tried examples from the Internet and also examples from this site, and there were errors that I needed to initialize my recycler view. I think that this error was due to the fact that there really is no recycler view in the second fragment, but how to get the object then. maybe someone understood what I mean and has a solution to this.