Android, как получить элемент по позиции из RecyclerView расширить ListAdapter - PullRequest
0 голосов
/ 24 октября 2018

Я использую ListAdapter в моем RecyclerView Adpater, как показано ниже: вопрос в том, как мне получить объект элемента из моего вида по его позиции в строке.Я пытаюсь написать функцию в моем адаптере, чтобы получить объект элемента по его позиции, вызываемой из представления, но из-за того, что в моем адаптере нет списка, я не могу получить к нему доступ, чтобы получить значение объекта элемента

class QuotesRvAdapter(val mListener : OnQuotesRvListListener):
    ListAdapter<TblQuote, QuotesRvAdapter.ViewHolder>(TaskDiffCallback())
{

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

override fun onBindViewHolder(holder: ViewHolder, position: Int) {
    holder.bind(getItem(position),mListener)
}

class ViewHolder(itemView: View) : RecyclerView.ViewHolder(itemView) {

    fun bind(quote: TblQuote, mListener: OnQuotesRvListListener) {
        itemView.txtQuoteRow.text = quote.toString()
        itemView.ivDeleteRow.setOnClickListener { mListener.onDeleteQuote(quote) }
        itemView.setOnClickListener{ mListener.onPrepareForUpdate(quote) }
    }
}

class TaskDiffCallback : DiffUtil.ItemCallback<TblQuote>() {
    override fun areItemsTheSame(oldItem: TblQuote, newItem: TblQuote): Boolean {
        return oldItem.id == newItem.id
    }

    override fun areContentsTheSame(oldItem: TblQuote, newItem: TblQuote): Boolean {
        return oldItem == newItem
    }
}


interface OnQuotesRvListListener{
    fun onDeleteQuote(ob: TblQuote)
    fun onPrepareForUpdate(ob: TblQuote)
}

}

1 Ответ

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

Нет доступного метода для доступа к вашему объекту данных, вы должны вести его вручную.

class QuotesRvAdapter(val mListener : OnQuotesRvListListener):
        ListAdapter<TblQuote, QuotesRvAdapter.ViewHolder>(TaskDiffCallback())

{
    public YourDataClassName getItemData ( int position)
    {
        return getItem(position)

    }


class ViewHolder(itemView: View) : RecyclerView.ViewHolder(itemView) {

var myDataObj: YourDataClassName;

fun bind(quote: TblQuote, mListener: OnQuotesRvListListener, myData: YourDataClassName) {
        myDataObj = myData;
        itemView.txtQuoteRow.text = quote.toString()
        itemView.ivDeleteRow.setOnClickListener { mListener.onDeleteQuote(quote) }
        itemView.setOnClickListener{ mListener.onPrepareForUpdate(quote) }
}

}


}
...