Kotlin RecyclerView memulai aktivitas baru

Saya ingin memulai aktivitas baru dari RecyclerView dengan Kotlin.

Saya masih menjelajahi Kotlin dan saat ini terjebak pada cara membuka aktivitas baru dari 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 { 

            }
        }
    }
}

Saya tidak tahu cara memulai aktivitas baru untuk setiap item dalam RecyclerView. Saya tahu saya membuatnya lebih rumit dari sebelumnya.


person Brummerly    schedule 18.08.2019    source sumber
comment
Apakah maksud Anda memulai aktivitas baru saat mengklik item pada tampilan daur ulang?   -  person Fahry Mohammed    schedule 18.08.2019
comment
Pertanyaan ini telah ditanyakan berkali-kali   -  person a_local_nobody    schedule 18.08.2019
comment
@FahryMohammed Itu benar ya   -  person Brummerly    schedule 18.08.2019


Jawaban (3)


Mulai saja aktivitas dalam metode ViewHolder itemOnClick seperti di bawah ini. Dan Anda harus meneruskan referensi konteks aktivitas adaptor.

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
Anda bisa mendapatkan konteks dari viewholder, tidak perlu meneruskan konteks - person a_local_nobody; 19.08.2019
comment
bagaimana saya bisa melakukan itu??? - person Mikaware; 27.05.2021

Cukup gunakan ini:

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

Coba saja solusi ini: Pertama di adaptor Anda, tulis pendengar ke item recyclerview Anda:

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

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

Dan di dalam init :

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

Dan Akhirnya dalam Aktivitas Anda, Anda dapat menangani item 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->{}
    }
 }

Di sana Data adalah kelas model item Anda. Itu saja, saya harap ini membantu Anda!

person Muhammad Husniddin Madaminov    schedule 20.08.2019