В моей деятельности есть Recyclerview. в нем всегда 10 предметов. Элемент Recyclerview имеет две кнопки, каждая из которых прослушивает щелчок, определенный в onBindViewHolder
методе класса адаптера. после нажатия любой из кнопок элементов вызывает метод обратного вызова, который реализуется в методе действия onCreate
. Метод обратного вызова передает adapterPosition
в действие, действие возвращает длинное значение, с помощью которого я обновляю текст кнопки.
Проблема в том, что когда я нажимаю кнопку первого элемента в окне повторного просмотра, он обновляет текст первого и последнего элемента. Сначала я использовал position
, но затем изменил его на adapterPosition
или layoutPosition
, но это не сработало. иногда обновляется предыдущий элемент, а иногда последний обновляется с обновлением первого элемента
код onCreate действия
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_videocrop)
var segmentAdapter = SegmentAdapter(10)
var layoutManager = LinearLayoutManager(this, RecyclerView.VERTICAL, false)
videoCropRecyclerView.adapter = segmentAdapter
videoCropRecyclerView.layoutManager = layoutManager
segmentAdapter.onSegmentSelectedListener = object : OnSegmentSelectedListener {
override fun onSelectFrom(index: Int): Int? {
return 12345
}
override fun onSelectTo(index: Int): Int? {
return 54321
}
}
}
Код класса адаптера
class SegmentAdapter(var segments: Int) : RecyclerView.Adapter<SegmentAdapter.SegmentViewHolder>() {
var onSegmentSelectedListener: OnSegmentSelectedListener? = null
override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): SegmentViewHolder =
SegmentViewHolder(LayoutInflater.from(parent.context).inflate(R.layout.videocrop_segment_item, parent, false))
override fun getItemCount(): Int = segments
override fun onBindViewHolder(holder: SegmentViewHolder, position: Int) {
holder.from!!.setOnClickListener {
holder.from!!.text = onSegmentSelectedListener!!.onSelectFrom(holder.adapterPosition)
}
holder.to!!.setOnClickListener {
holder.to!!.text = onSegmentSelectedListener!!.onSelectTo(holder.adapterPosition)
}
}
class SegmentViewHolder(itemView: View) : RecyclerView.ViewHolder(itemView) {
var from: Button? = null
var to: Button? = null
init {
from = itemView.findViewById(R.id.videoCropSegmentItemFromButton)
to = itemView.findViewById(R.id.videoCropSegmentItemToButton)
}
}
}
Код интерфейса обратного вызова
interface OnSegmentSelectedListener {
fun onSelectFrom(index:Int):Int?
fun onSelectTo(index:Int):Int?
}
когда я нажимаю кнопку первого элемента, и его текст становится «0»
, затем я прокручиваю вниз до последнего элемента и вижу последний элемент также обновляется
Я также проверил этот вопрос, но он не помог.
Я был бы очень благодарен, если бы кто-нибудь помог мне