Kotlin RecyclerView начать новую активность

Я хотел бы начать новую деятельность с RecyclerView с Kotlin.

Я все еще изучаю Kotlin и в настоящее время застрял в том, как открыть новую активность из RecyclerView.

class HomeScreenRecyclerAdapter : RecyclerView.Adapter<HomeScreenRecyclerAdapter.ViewHolder>()
{
    private val titles = arrayOf("About Me",
            "About Me", "About Me", "About Me"
    )
    private val details = arrayOf("Item one details", "Item two details",
            "Item three details", "Item four details")


    private val images = intArrayOf(R.drawable.ic_launcher_background,
            R.drawable.ic_launcher_background, R.drawable.ic_launcher_background,
            R.drawable.ic_launcher_background)

    override fun onCreateViewHolder(viewGroup: ViewGroup, i: Int): ViewHolder {
        val v = LayoutInflater.from(viewGroup.context)
                .inflate(R.layout.main_card_view, viewGroup, false)
        return ViewHolder(v)
    }

    override fun onBindViewHolder(viewHolder: ViewHolder, position: Int) {
        viewHolder.itemTitle.text = titles[position]
        viewHolder.itemDetail.text = details[position]
        viewHolder.itemImage.setImageResource(images[position])
    }

    override fun getItemCount(): Int {
        return titles.size
    }

    inner class ViewHolder(itemView: View) : RecyclerView.ViewHolder(itemView) {
        val intent: Intent? = null
        var itemImage: ImageView
        var itemTitle: TextView
        var itemDetail: TextView
        init {
            itemImage = itemView.findViewById(R.id.main_image_view)
            itemTitle = itemView.findViewById(R.id.main_title_view)
            itemDetail = itemView.findViewById(R.id.main_description_view)

            itemView.setOnClickListener { 

            }
        }
    }
}

Я просто не могу понять, как начать новое действие для каждого элемента в RecyclerView. Я знаю, что усложняю задачу.


person Brummerly    schedule 18.08.2019    source источник
comment
Вы имеете в виду запуск нового действия при нажатии элемента в режиме просмотра корзины?   -  person Fahry Mohammed    schedule 18.08.2019
comment
Этот вопрос задавали тонну раз   -  person a_local_nobody    schedule 18.08.2019
comment
@FahryMohammed Это правильно, да   -  person Brummerly    schedule 18.08.2019


Ответы (3)


Просто запустите действие в методе itemOnClick ViewHolder, как показано ниже. И вам нужно передать контекстную ссылку активности адаптера.

class HomeScreenRecyclerAdapter(var mContext:Context) : RecyclerView.Adapter<HomeScreenRecyclerAdapter.ViewHolder>()
{
    private val titles = arrayOf("About Me",
        "About Me", "About Me", "About Me")

    private val details = arrayOf("Item one details", "Item two details",
        "Item three details", "Item four details")


    private val images = intArrayOf(R.drawable.ic_launcher_background,
        R.drawable.ic_launcher_background, R.drawable.ic_launcher_background,
        R.drawable.ic_launcher_background)

    override fun onCreateViewHolder(viewGroup: ViewGroup, i: Int): ViewHolder {
       val v = LayoutInflater.from(viewGroup.context)
            .inflate(R.layout.main_card_view, viewGroup, false)
       return ViewHolder(v)
    }

    override fun onBindViewHolder(viewHolder: ViewHolder, position: Int) {
       viewHolder.itemTitle.text = titles[position]
       viewHolder.itemDetail.text = details[position]
       viewHolder.itemImage.setImageResource(images[position])
    }

    override fun getItemCount(): Int {
       return titles.size
    }

   inner class ViewHolder(itemView: View) : RecyclerView.ViewHolder(itemView) {
      val intent: Intent? = null
      var itemImage: ImageView
      var itemTitle: TextView
      var itemDetail: TextView
     init {
        itemImage = itemView.findViewById(R.id.main_image_view)
        itemTitle = itemView.findViewById(R.id.main_title_view)
        itemDetail = itemView.findViewById(R.id.main_description_view)

        itemView.setOnClickListener { 
             mContext.startActivity(Intent(mContext, ActivityNameWhichYouWantCall::class.java))
        }
    }
  }
}
person Fahry Mohammed    schedule 18.08.2019
comment
вы можете получить контекст от средства просмотра, нет необходимости передавать контекст - person a_local_nobody; 19.08.2019
comment
Как мне это сделать??? - person Mikaware; 27.05.2021

Просто используйте это:

context.startActivity(Intent(context, Activity::class.java))
person avishek adhikari    schedule 18.08.2019

Просто попробуйте это решение: сначала в вашем адаптере напишите слушателя для ваших элементов recyclerview:

class HomeScreenRecyclerAdapter(val data: ArrayList<Data>) : RecyclerView.Adapter<ContactAdapter.ViewHolder>() {
private var listener: ((Data) -> Unit)? = null
...

fun setOnItemClickListener(f: (Data) -> Unit) {
     listener = f
}

И внутри инициализации:

 itemView.setOnClickListener {
      listener?.invoke(data[adapterPosition])
 }

И, наконец, в своей деятельности вы можете взять дескриптор элемента clickListeners:


private val data = ArrayList<Data>()
val adapter = HomeScreenRecyclerAdapter(data)

 adapter.setOnItemClickListener {
    when(it){
      1->{startActivity(Intent(context, YourActivity1::class.java))}
      2->{startActivity(Intent(context, YourActivity2::class.java))}
      ...
      else->{}
    }
 }

Там данные - это модельный класс вашего товара. Вот и все, я надеюсь, что это поможет вам!

person Muhammad Husniddin Madaminov    schedule 20.08.2019