Адаптер Recyclerview для полезной нагрузкиBindViewHolder не работает - PullRequest
0 голосов
/ 08 марта 2020

Я проверил все примеры, но в конце концов они не работают. Насколько я знаю, даже если полезная нагрузка 'List', значение String или Int может go в.

class RecordListAdapter (val context: Context, val layoutManager: LinearLayoutManager, private val canBeEdited: Boolean)
    : RecyclerView.Adapter<RecordListAdapter.RecordViewHolder>() {

    private val inflater: LayoutInflater = LayoutInflater.from(context)
    private var records: ArrayList<Record> = arrayListOf()

    // Update ALL VIEW holder
    override fun onBindViewHolder(holder: RecordViewHolder, position: Int) {
        val current = records[position]

        holder.autoCompleteTextView.text = SpannableStringBuilder(current.name)
        holder.weightPicker.value = current.weight
        holder.setPicker.value = current.set
        holder.repsPicker.value = current.reps

        if(position == itemCount - 1) holder.addBtn.visibility = View.VISIBLE
        else holder.addBtn.visibility = View.GONE

        if(canBeEdited) {
            if(itemCount == 1) {
                holder.deleteBtn.visibility = View.GONE
            } else {
                holder.deleteBtn.visibility = View.VISIBLE
                holder.deleteBtn.setOnClickListener {
                    records.remove(current)
                    notifyItemRemoved(position)
                }
            }
        } else
            holder.deleteBtn.visibility = View.GONE
    }

    // Update only part of ViewHolder that you are interested in
    override fun onBindViewHolder(holder: RecordViewHolder, position: Int, payloads: MutableList<Any>) {
        Log.e("payload", "::$payloads")
        if(payloads.isNotEmpty()) {
        } else
            super.onBindViewHolder(holder,position, payloads)
    }

    private fun addRecordDefault() {
        this.records.add(Record("", 28, 5, 10))
        notifyItemInserted(itemCount)
        notifyItemRangeChanged(itemCount-1, 2, "PAYLOAD_ADD_BTN")
    }

    override fun getItemCount() = records.size
}

Как и в предыдущем коде, я установил Log.e, чтобы узнать, является ли значение пустым или нет. Полезная нагрузка Log.e всегда говорит, что она нулевая.

E / полезная нагрузка: :: []

1 Ответ

0 голосов
/ 09 марта 2020

Во-первых, кажется, что вы просто добавляете элемент и хотите сразу что-то изменить в нем с полезными нагрузками.
Очевидно, что когда вы просто добавляете новый, весь элемент должен быть нарисован, поэтому полезные нагрузки не нужны .
Только тогда, когда он уже нарисован и вы хотите изменить некоторые элементы, вы можете использовать полезные данные с notifyItemChanged (если один элемент был изменен) или notifyItemRangeChanged (если несколько элементов были изменены).

Во-вторых, я не уверен относительно диапазона, который вы используете.
Первый аргумент notifyItemRangeChanged - это начальный индекс.
Второй - сколько элементов вы хотите изменить.

В-третьих, неясно, куда вы звоните addRecordDefault. Поэтому убедитесь, что вы вызвали notifyItemChanged или notifyItemRangeChanged с полезными нагрузками.

...