Как получить позицию первого и последнего видимых элементов в программе recyclerView, если она находится внутри NestedScrollView? - PullRequest
1 голос
/ 04 ноября 2019

У меня есть два RecyclerView в линейном горизонтальном расположении внутри NestedScrollView, один для показа индексов, а другой для отображения данных (я знаю, что мог бы сделать это за один RecyclerView, но я хочувключите перетаскивание только на данные RecyclerView, а не на другие, поэтому мне пришлось использовать два RecyclerView). Теперь, когда я хочу, чтобы они прокручивались вместе, я поместил их в линейный горизонтальный макет внутри NestedScrollView. Теперь мне нужно получить позиции первого и последнего видимых предметов в RecyclerView. Как я могу получить это?

Я пытался заменить NestedScrollView на ScrollView, но затем два RecyclerView прокручивали по отдельности, что мне не нужно. Я также попытался добавить addOnScrollListener к данным recyclerView. Но он возвращает только 0 и размер List.

itemRecyclerView.addOnScrollListener(object : RecyclerView.OnScrollListener() {
    override fun onScrolled(recyclerView: RecyclerView, dx: Int, dy: Int) {
        super.onScrolled(recyclerView, dx, dy)
        log("onScrolled")
        val layoutManager = itemRecyclerView.layoutManager
        if (layoutManager is LinearLayoutManager) {
        log("First visible Item: " + layoutManager.findFirstVisibleItemPosition())
        log("First complete visible Item: " + layoutManager.findFirstCompletelyVisibleItemPosition())
        log("Last visible Item: " + layoutManager.findLastVisibleItemPosition())
        log("Last complete visible Item: " + layoutManager.findLastCompletelyVisibleItemPosition())
    }
}

1 Ответ

0 голосов
/ 04 ноября 2019

Попробуйте изменить val layoutManager = itemRecyclerView.layoutManager на val layoutManager = recyclerView.layoutManager. В этом случае вы будете уверены, что вы получаете layoutManager из RecyclerView, на котором вы установили свой слушатель.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...