Android kotlin - RecyclerView выясняет, что именно внутри элемента было нажато в упражнении / фрагменте - PullRequest
0 голосов
/ 31 октября 2018

Это адаптер:

class ToplistAdapter(val context: Context, private val users: MutableList<Toplist>, val itemClick: (Toplist) -> Unit) : RecyclerView.Adapter<ToplistAdapter.ViewHolder>(){

    override fun onBindViewHolder(holder: ViewHolder, position: Int) {
        val user = users[position]
        holder.percent.text = user.prozent
        Picasso.get().load(user.image).into(holder.imagee)

        holder.bind(users[position], context)
    }

    override fun getItemCount() = users.size

    override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): ViewHolder {
        val view = LayoutInflater.from(parent.context).inflate(R.layout.toplist, parent, false)
        return ViewHolder(view, itemClick)
    }

    class ViewHolder(itemView: View?, val itemClick: (Toplist) -> Unit) : RecyclerView.ViewHolder(itemView!!){

        val percent = itemView!!.text_percent
        val imagee = itemView!!.image_view

        fun bind(toplist: Toplist, context: Context){
            itemView.setOnClickListener {
                itemClick(toplist)
            }
        }
    }
}

И это во фрагменте:

            adapter = ToplistAdapter(activity!!, users) {
                // Profile(it.userid.toString())
            }

            recyclerView.adapter = adapter

            recyclerView.layoutManager = GridLayoutManager(activity!!, 2)
            recyclerView.setHasFixedSize(true)

Я знаю, как установить onClicklistener внутри onBindViewHolder, и выяснить, нажали ли text_percent или image_view , но как я могу сделать это во фрагменте помимо получения userid и т. Д.

Заранее спасибо

EDIT:

Запрошенный класс модели данных:

data class Toplist(
        val image: String,
        val prozent: String,
        val userid: Long
)

1 Ответ

0 голосов
/ 31 октября 2018

В вашем адаптере создайте ClickListener

   open interface ClickListener {
        fun onClick(position: Int)

    }

затем внедрите свой адаптер

class ToplistAdapter(val context: Context, private val users: MutableList<Toplist>, val listener: ClickListener) : RecyclerView.Adapter<ToplistAdapter.ViewHolder>(){

   companion object {
        var clickListener: ClickListener? = null
    }


    override fun onBindViewHolder(holder: ViewHolder, position: Int) {

    clickListener = listener
    val user = users[position]
    holder.percent.text = user.prozent
    Picasso.get().load(user.image).into(holder.imagee)

    holder.bind(users[position], context)
    holder.imagee.setOnClickListener { 
        itemClick(users[position]) 
    }
   holder.imagee.setOnClickListener(object : View.OnClickListener {
            override fun onClick(v: View?) {
                if (clickListener != null)
                    clickListener?.onClick(position)
            }
        })



    }

тогда ваш фрагмент или Активность добавьте

     adapter = ToplistAdapter(activity!!, users, object : ToplistAdapter.ClickListener {
            override fun onClick(position: Int) {
               val user=users[position]
               val userid=user.userid
            }
        })
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...