Move to a Details Fragment with arguments including info about an object

67 views Asked by At

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.

0

There are 0 answers