Анко намерение от RecyclerView к новой деятельности

Я новичок в kotlin, и сейчас пытаюсь создать приложение, которое может отображать списки клубов в онлайн-классе в режиме переработчика. Если я щелкну один из элементов, он должен перейти к новому действию, в котором могут отображаться сведения об элементе. Следует использовать анко общие и макет (намерение и макет детали). Звучит просто, но я не могу понять, как получить позицию в окне реселлера и получить дополнительные намерения, после этого я должен взять дополнительные сведения в виде детализации и отобразить их. Мне действительно нужна твоя помощь. Вот мой код:

MainActivity.kt

class MainActivity : AppCompatActivity() {

private var items: MutableList<Item> = mutableListOf()

override fun onCreate(savedInstanceState: Bundle?) {
    super.onCreate(savedInstanceState)
    setContentView(R.layout.activity_main)

    initData()

    club_list.layoutManager = LinearLayoutManager(this)
    club_list.adapter = RecyclerViewAdapter(this, items)

}

private fun initData(){
    val name = resources.getStringArray(R.array.club_name)
    val image = resources.obtainTypedArray(R.array.club_image)
    items.clear()

    for(i in name.indices){
        items.add(Item(name[i],
                image.getResourceId(i, 0)))
    }
    image.recycle()
}

}

Item.kt

data class Item (val name: String?, val image: Int?)

RecyclerViewAdapter.kt

class RecyclerViewAdapter(private val context: Context, private val items: List<Item>)
: RecyclerView.Adapter<RecyclerViewAdapter.ViewHolder>() {

override fun onCreateViewHolder(parent: ViewGroup, viewType: Int) =
        ViewHolder(LayoutInflater.from(context).inflate(R.layout.item_list, parent, false))

override fun onBindViewHolder(holder: ViewHolder, position: Int) {
    holder.bindItem(items[position])
}

override fun getItemCount(): Int = items.size

class ViewHolder(view: View) : RecyclerView.ViewHolder(view){
    init{
        view.setOnClickListener {
            view.context.startActivity(view.context.intentFor<DetailsActivity>("name" to ""))
        }
    }

    fun bindItem(items: Item) {
        itemView.name.text = items.name
        Glide.with(itemView.context).load(items.image).into(itemView.image)
    }
}

}DetailsActivity.kt

class DetailsActivity : AppCompatActivity() {

private var name: String = ""
private var desc: String = ""
lateinit var nameTextView: TextView
lateinit var descTextView: TextView
lateinit var imgPhotos: ImageView

override fun onCreate(savedInstanceState: Bundle?) {
    super.onCreate(savedInstanceState)
    verticalLayout {
        topPadding = 20
        gravity = Gravity.CENTER_HORIZONTAL
        /*imgPhotos = imageView(R.drawable.ic_launcher_background).
                lparams(width= matchParent) {
                    padding = dip(20)
                    margin = dip(15)
                }*/
        // TextView nama tim
        nameTextView = textView {
            text = "ContohTeam FC"
            textSize = 36F
            typeface = Typeface.DEFAULT_BOLD
        }.lparams {
            width = matchParent
        }
        //TExtView deskripsi tim
        /*descTextView = textView {
            text = "insert some random text here"
            textSize = 12F
        }.lparams {
            width = matchParent
        }*/
    }

    val intent = intent
    name = intent.getStringExtra("name")
    //desc = intent.getStringExtra("desc")

    nameTextView.text = name
    //descTextView.text = desc
}

}

Спасибо:)

1 ответ

Решение

Чтобы передать позицию адаптера:

class ViewHolder(view: View) : RecyclerView.ViewHolder(view){
    init{
        view.setOnClickListener {
            view.context.startActivity<MyActivity>("key" to getAdapterPosition())
        }
    }
}

Чтобы восстановить в вашей деятельности

val position = intent!!.extras.getInt("key")

UPD: точно так же для любых других данных:

class ViewHolder(view: View) : RecyclerView.ViewHolder(view){
    fun bindItem(items: Item) {
        itemView.name.text = items.name
        Glide.with(itemView.context).load(items.image).into(itemView.image)

        view.setOnClickListener {
                view.context.startActivity<MyActivity>("image" to items.image, "name" to items.name)
            }
    }
}
Другие вопросы по тегам