Implementación onItemClickLitsner en recyclerView Kotlin -android

Estoy escribiendo mi primera aplicación de Android en Kotlin y estoy tratando de implementar onItemClickListner en un RecyclerView utilizando kotlin en android studio 3.0, pero todavía no puedo encontrar nada útil. entonces tengo MovieListGagment :

class MoviesListFragment : Fragment() { private var mListener: OnFragmentInteractionListener? = null private var movieList = ArrayList<Movies>() private var mAdapter: MoviesRecyclerAdapter? = null override fun onCreateView(inflater: LayoutInflater?, container: ViewGroup?, savedInstanceState: Bundle?): View? { // Inflate the layout for this fragment return inflater!!.inflate(R.layout.fragment_movies_list, container, false) } override fun onViewCreated(view: View?, savedInstanceState: Bundle?) { super.onViewCreated(view, savedInstanceState) mAdapter = MoviesRecyclerAdapter(movieList) val mLayoutManager = LinearLayoutManager(this.activity) recyclerView!!.layoutManager = mLayoutManager recyclerView!!.itemAnimator = DefaultItemAnimator() recyclerView!!.adapter = mAdapter prepareMoviesData() } interface OnFragmentInteractionListener { // TODO: Update argument type and name fun onFragmentInteraction(uri: Uri) } private fun prepareMoviesData() { var movie = Movies("Mad Max: Fury Road", "Action & Adventure", "2015") movieList.add(movie) movie = Movies("Inside Out", "Animation, Kids & Family", "2015") movieList.add(movie) movie = Movies("Star Wars:The Force Awakens", "Action", "2015") movieList.add(movie) mAdapter!!.notifyDataSetChanged() } } 

y el adaptador MoviesRecyclerAdapter:

 class MoviesRecyclerAdapter(private val moviesList: List<Movies> ) : RecyclerView.Adapter<MoviesRecyclerAdapter.MyViewHolder>() { class MyViewHolder(view: View ) : RecyclerView.ViewHolder(view) ,View.OnClickListener { var title: TextView = view.findViewById<TextView>(R.id.title) var year: TextView = view.findViewById<TextView>(R.id.year) var genre: TextView = view.findViewById<TextView>(R.id.genre) } override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): MyViewHolder { val itemView = LayoutInflater.from(parent.context) .inflate(R.layout.movie_list_row, parent, false) return MyViewHolder(itemView ) } override fun onBindViewHolder(holder: MyViewHolder, position: Int) { val Movies = moviesList[position] holder.title.text = Movies.title holder.genre.text = Movies.genre holder.year.text = Movies.year } override fun getItemCount(): Int { return moviesList.size } } 

Necesito que cuando el usuario click un elemento de la list para abrir otra Actividad, ¿cuál es el limpiador y la mejor manera de hacerlo?

Puede usar un lambda como callback, por ejemplo, como propiedad de class de su adaptador:

 var onItemClick: (Int) -> Unit = {} 

luego en onCreateViewHolder :

 itemView.setOnClickListener { onItemClick(viewHolder.getAdapterPosition()) } 

y no te olvides de configurar la callback desde tu fragment:

 adapter.onClick = { position -> // do something here } 
  • java.lang.IllegalStateException: TextView no debe ser nulo (Android / Kotlin)
  • Android solo estableceStackFromEnd solo si RecycleView / List es más grande que la pantalla
  • Haga que los niños de RecyclerView coincidan con la altura de los padres cuando usan el constructor en lugar de inflar para crearlos
  • SortedList IndexOutBoundsException: Inconsistencia detectada. La position del artículo no es válida al eliminar el último elemento
  • La animation SwipeRefreshLayout del primer bash de actualización se ejecuta sin parar
  • La image no se muestra en Recyclerview usando Glide
  • DiffUtils y multi selección
  • RecyclerView animation de elementos, se llama AnimationFinished, pero no está activado en AnimationStarted. ¿Por qué?
  • ¿Cómo agregar una image más como un button al final de mi RecyclerView en Android?
  • RecyclerView con múltiples layouts es desigual
  • Genéricos para RecyclerView.Adapter Android