Hi! Is it possible to call `scrollToPosition` of `...
# compose
d
Hi! Is it possible to call
scrollToPosition
of
RecyclerView
from an
AndroidView
? More info in the 🧵
Here's my scenario: I have a
Column
that contains some other composables + an AndroidView in which I'm inflating a
RecyclerView
. One of the Composables is clickable, and I should scroll the
RecyclerView
to a certain position. Not only the Recycler should scroll, but also entire screen as well. Here's an overview of my Composables:
Copy code
val scrollState = rememberScrollState()

fun BaseComposable(){
    Column(modifier = Modifier.verticalScroll(scrollState)) {
        ClickableComposable()
        AndroidView()
    }
}
What I've already tried so far: 1. I tried to create a reference to my
RecyclerView
by instantiating it and then passing it to the
factory
lambda of the
AndroidView
. Also, when I click one of the Composables I call:
Copy code
private fun MyComposable(
    modifier = Modifier.clickable { recyclerViewRef.scrollToPosition(5) }
)
I already guaranteed that my
recyclerViewRef
actually references my
RecyclerView
, however, the scroll doesn't happen. I tried to add some logs to verify if the
OnScrollListener
is being called. It is, except that it is only being called when I inflate my
RecyclerView
. 2. By reading the Scroll doc, I changed the Column modifier from
verticalScroll
to a
nestedScroll
passing a
NestedScrollConnection
. This kinda worked. The only caveat is that the only part that actually scrolls now is the Recycler itself, not the entire screen. But here's the catch: calling
scrollToPosition
worked and both the
RecyclerView
OnScrollListener logs + the nested scroll connection logs that I've added are actually being printed. To sum it up, how can make my screen scroll entirely and also be able to call
scrollToPosition
of my RecyclerView to scroll not only itself but also the screen?
Inflating a
RecyclerView
inside a
Scaffold
with a
LargeTopAppBar
with a scroll behavior of type
ExitUntilCollapsed
works, the top bar is successfully expanding/collapsing via
NestedScrollConnection
and if I force a navigation icon that calls the
scrollToPosition
it also scrolls the RecyclerView! However, that's not the case if I put my RecyclerView inside another Column 😕 like:
Copy code
Scaffold(
    topBar = { LargeTopAppBar() },
    scrollBehavior = TopAppBarDefaults.exitUntilCollapsedScrollBehavior()
) { innerPadding ->
    // the entire Column should scroll
    Column(modifier = Modifier.padding(innerPadding)) {
        OtherComposable()
        AndroidView(factory = { recyclerView })
    }
}
Does anyone knows how to achieve this?