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)


เพียงเริ่มต้นกิจกรรมภายในวิธี ViewHolder itemOnClick ดังตัวอย่างด้านล่าง และคุณต้องผ่านการอ้างอิงบริบทของกิจกรรมของอะแดปเตอร์

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

เพียงลองใช้วิธีแก้ปัญหานี้: ประการแรกในอะแดปเตอร์ของคุณเขียน Listener ไปยังรายการ recyclerview ของคุณ:

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

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

และภายใน init :

 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->{}
    }
 }

มี Data คือคลาสโมเดลของรายการของคุณ เพียงเท่านี้ ฉันหวังว่านี่จะช่วยคุณได้!

person Muhammad Husniddin Madaminov    schedule 20.08.2019