У меня есть RecyclerView, заполненный контентом.
Одно из значений внутри RecyclerView этого Holder — это var entity_id: Int.
Мне нужно было бы перебрать строки RecyclerView, чтобы найти строку, содержащую конкретный entity_id, не зная положения адаптера.
Другими словами, я знаю, что одна из моих строк entity_id равна 23, мне нужно получить adapterPosition этой строки.




Если вам нужно получить только позицию для значения 23 - вы можете сделать обратный вызов в своем ViewHolder, где вы проверите значение, и если оно будет 23 -> отправить обратный вызов с позицией этого элемента.
Вот как это выглядит ->
Ваш ViewHolder:
class MyRecyclerViewAdapter(private val callback: (Int) -> Unit) : RecyclerView.Adapter<MyRecyclerViewAdapter.MyViewHolder>() {
override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): MyViewHolder {
TODO("not implemented") //To change body of created functions use File | Settings | File Templates.
}
override fun getItemCount(): Int {
TODO("not implemented") //To change body of created functions use File | Settings | File Templates.
}
override fun onBindViewHolder(holder: MyViewHolder, position: Int) {
TODO("not implemented") //To change body of created functions use File | Settings | File Templates.
}
inner class MyViewHolder(v: View) : RecyclerView.ViewHolder(v) {
fun bind(model: Model) {
TODO("Some logic")
if (model.id == 23) {
callback.invoke(adapterPosition)
}
}
}
}
Модель:
class Model(val id: Int)
Деятельность:
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_main)
/** Init LayoutManager
* ....
* */
val adapter = MyRecyclerViewAdapter(callback = { position ->
TODO("Do some logic with your position")
})
}
Можете ли вы объяснить свою задачу еще раз. Потому что тот пример, что я вам посылаю - работает.
Прокрутите ваши конечные элементы адаптера и сопоставьте с вашим условием, если элемент найден, то индекс цикла - это позиция вашего элемента адаптера.
private fun getPosition(entityId: Int): Int {
for (i in list.indices) {
if (list[i].entity_id == entityId) { //match with your id
return i
}
}
return -1
}
Спасибо, вот близко, когда я давал 23, это было только для примера. Извините, надо было уточнить, что не 23, а "какое-то число"