Как я могу добавить Butterknife в адаптер и почему в этом коде я могу получить доступ только к deleteItem в привязке - PullRequest
0 голосов
/ 21 июня 2020

У меня есть этот код для моего адаптера.

class AdapterPendingCases(private val values: MutableList<String>):RecyclerView.Adapter<AdapterPendingCases.PendingCasesViewHolder>() {
    override fun getItemCount()=values.size

     inner class PendingCasesViewHolder constructor(itemView: View):RecyclerView.ViewHolder(itemView) {
         private val briefDescription=itemView.findViewById<TextView>(R.id.briefDescription)
         private val currData=itemView.findViewById<TextView>(R.id.currData)
         val deleteItem=itemView.findViewById<ImageView>(R.id.deleteItem) //надо как-то переделать с помощью ButterKnife

         fun bind(item:String) {
            briefDescription.text=item
             val date = getCurrentDateTime()
             val dateInString = date.toString("yyyy/MM/dd HH:mm:ss")
             currData.text= dateInString
        }

         private fun Date.toString(format: String, locale: Locale = Locale.getDefault()): String {
             val formatter = SimpleDateFormat(format, locale)
             return formatter.format(this)
         }

         private fun getCurrentDateTime(): Date {
             return Calendar.getInstance().time
         }

        fun deleteClick(View: View) {
            values.removeAt(adapterPosition)
            notifyDataSetChanged()
        }

     }

    override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): PendingCasesViewHolder{
        return PendingCasesViewHolder(LayoutInflater.from(parent.context).inflate(R.layout.item_pending_cases, parent, false))}

    override fun onBindViewHolder(holder: PendingCasesViewHolder, position: Int) {
        holder.bind(values[position])
    }


    fun delAndUpdate(position: Int) {
        values.removeAt(position)
        notifyDataSetChanged()
    }

Я хочу использовать Butterknife и использовать @OnClick для deleteItem. Теперь я не могу связать щелчок для моего deleteItem. Готов выслушать другие рекомендации по коду. ps в проекте Butterknife работает корректно.

1 Ответ

0 голосов
/ 21 июня 2020

ButterKnife имеет функцию, которая позволяет вам передавать вид, и цель должна быть привязана к: ButterKnife.bind(this, view). Таким образом, вы можете добавить все необходимые аннотации и использовать эту функцию для получения ожидаемого поведения. Работает с любым классом. Целевой класс не обязательно должен быть основан на Fragment, Activity или какой-либо Android -specifi c class.

Вот решение с использованием аннотаций ButterKnife:

    inner class PendingCasesViewHolder : RecyclerView.ViewHolder {
        @BindView(R.id.briefDescription)
        lateinit var briefDescription: TextView

        @BindView(R.id.currData)
        lateinit var currData: TextView

        @BindView(R.id.deleteItem)
        lateinit var deleteItem: ImageView

        constructor(itemView: View) : super(itemView) {
            ButterKnife.bind(this, view)
        }

        ...

        @OnClick(R.id.deleteItem)
        fun deleteClick(view: View) {
            values.removeAt(adapterPosition)
            notifyDataSetChanged()
        }
    }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...