Intereting Posts
Не удается отправить многостраничные данные / данные формы с помощью Volley Котлин «Смарт-литье невозможно, потому что к этому моменту собственность могла быть изменена» Использование функции Kotlin как типа Java SAM Как получить java.io.File из ресурса R.raw FloatingActionButton: настройка настраиваемого фона не поддерживается ReactiveStreams NPE при использовании publishOn с пользовательским издателем RuntimeException, если minifyEnabled истинно с классом ViewModel Как комментировать столбцы как NOT NULL с помощью библиотеки сохранения пространства Android BadCredentialsException: не удалось получить токен доступа с безопасностью загрузки Oauth2 на GAE Как я могу получить время, необходимое для проверки производительности функций в Котлине Android SpeechRecognizer не запускается снова Покрытие Jacoco и параметры по умолчанию Kotlin Список связанных со списком в Котлине Ошибка плагина Kotlin: не удалось создать прокси-класс для класса org.jetbrains.kotlin.gradle.tasks.KotlinCompile Не удается получить доступ к внутренним компонентам из тестового источника с помощью Android

Внедрение onItemClickLitsner в recyclerView Kotlin -android

Я пишу свое первое приложение для Android в Котлине, и я пытаюсь реализовать onItemClickListner в RecyclerView, используя kotlin в Android 3.0, но я не могу найти что-нибудь полезное. поэтому у меня есть movieListFRagment :

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() } } 

и адаптер 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 } } 

мне нужно, когда пользователь щелкает элемент в списке, чтобы открыть другое действие, что является чище и лучший способ сделать это.

Вы можете использовать лямбда в качестве обратного вызова щелчка, например, как свойство класса вашего адаптера:

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

затем в onCreateViewHolder :

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

и не забудьте установить обратный вызов из вашего фрагмента:

 adapter.onClick = { position -> // do something here }