Найти положение строки RecyclerView, просматривая значения RecyclerView - PullRequest
0 голосов
/ 29 июня 2019

У меня есть RecyclerView, который заполнен контентом.

Одно из значений внутри этого RecyclerView 'Holder является var entity_id: Int.

Мне нужноцикл по строкам RecyclerView, чтобы найти строку, содержащую определенный entity_id, не зная позиции адаптера.

Другими словами, я знаю, что одна из моих строк entity_id равна 23, мне нужно получить позицию адаптера для этой строки.

Ответы [ 2 ]

1 голос
/ 29 июня 2019

Просмотрите все последние элементы адаптера и сопоставьте их с вашим состоянием, если элемент найден, то индекс цикла - это позиция элемента адаптера.

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
}
0 голосов
/ 29 июня 2019

Если вам нужно получить только позицию для значения 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")
    })
 }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...