Fixed
Status Update
Comments
pa...@cardinalblue.com <pa...@cardinalblue.com> #2
Nested scrolling works partially (as per http://b/122818889 ). Let's discuss if we need full support and if so make sure it works.
pa...@cardinalblue.com <pa...@cardinalblue.com> #3
Hi!
What is 'partially' exactly?
How do I see it?
Thanks!
What is 'partially' exactly?
How do I see it?
Thanks!
jb...@google.com <jb...@google.com> #4
As of now:
- Nesting scroll views with a scroll direction perpendicular to the ViewPager2's orientation inside ViewPager2 works
- Nesting scroll views with a scroll direction parallel to the ViewPager2's orientation inside ViewPager2 does not work
- Nesting scroll views with a scroll direction perpendicular to the ViewPager2's orientation inside ViewPager2 works
- Nesting scroll views with a scroll direction parallel to the ViewPager2's orientation inside ViewPager2 does not work
pa...@cardinalblue.com <pa...@cardinalblue.com> #5
Horizontal ViewPager2 not correctly working into a vertical RecyclerView
Set a setNestedScrollingEnabled to the RecyclerView into the ViewPager2 (across reflection) resolves the problem
Set a setNestedScrollingEnabled to the RecyclerView into the ViewPager2 (across reflection) resolves the problem
mi...@gmail.com <mi...@gmail.com> #6
ageevvalentin@gmail.com, could you provide a sample app? I'd like to learn more about the circumstances that cause the problem; putting a clean ViewPager2 inside a clean RecyclerView seems to work fine, so there must be other factors involved.
pa...@cardinalblue.com <pa...@cardinalblue.com> #7
Added a patch for androidx-master-dev that demos a horizontal ViewPager2 inside a vertical RecyclerView.
Verified that it works correctly on a:
- Nexus 4 emulator with API 17
- Nexus 5X emulator with API 28
- Pixel 2 device with API 29
To reproduce:
- Check out the Android Jetpack source (at commit 256899f482ff85cddfb050f37550be7b5ec927ef) (see steps in [1])
- Apply the patch (`git apply 0001-Add-sample-where-a-horizontal-ViewPager2-is-nested-i.patch`)
- Build and install viewpager2's integration-tests app: `./gradlew viewpager2:integration-tests:testapp:installDebug`
- Run it
Closing the issue for now, but please reopen if you have a minimal reproduction app
[1]https://android.googlesource.com/platform/frameworks/support/+/256899f482ff85cddfb050f37550be7b5ec927ef
Verified that it works correctly on a:
- Nexus 4 emulator with API 17
- Nexus 5X emulator with API 28
- Pixel 2 device with API 29
To reproduce:
- Check out the Android Jetpack source (at commit 256899f482ff85cddfb050f37550be7b5ec927ef) (see steps in [1])
- Apply the patch (`git apply 0001-Add-sample-where-a-horizontal-ViewPager2-is-nested-i.patch`)
- Build and install viewpager2's integration-tests app: `./gradlew viewpager2:integration-tests:testapp:installDebug`
- Run it
Closing the issue for now, but please reopen if you have a minimal reproduction app
[1]
il...@google.com <il...@google.com>
ti...@google.com <ti...@google.com> #8
Re-opening as requested by a few users. Narrowed down the focus to nested scrolling elements with the same scroll direction.
ti...@google.com <ti...@google.com> #9
Any progress on this? (only talking about the "same scroll direction" issue)
I searched a lot for workarounds on Google and SO, but it seems no one really found a suitable solution yet.
The thing is that all other VerticalViewPagers out there have other problems that are similarly annoying. Most of them revolve around touch issues like "What's a click and what's a swipe" or "what's the fling threshold to snap to the next page".
So if someone knows of a working sample of VerticalViewPagers, I'd be happy to see a link :)
I searched a lot for workarounds on Google and SO, but it seems no one really found a suitable solution yet.
The thing is that all other VerticalViewPagers out there have other problems that are similarly annoying. Most of them revolve around touch issues like "What's a click and what's a swipe" or "what's the fling threshold to snap to the next page".
So if someone knows of a working sample of VerticalViewPagers, I'd be happy to see a link :)
pa...@cardinalblue.com <pa...@cardinalblue.com> #10
Hi, we're unlikely to address the "same scroll direction" issue before 1.0-Stable as it's likely going to require API changes (so v1.1+).
One possible option for VerticalViewPager with nested scrolling in the same scroll direction is using a RecyclerView implementing NestedScrollingParent + PagerSnapHelper to get snapping.
You'd then have to implement the NestedScrollingParent/Child contract between parent/child RecyclerView instances.
One possible option for VerticalViewPager with nested scrolling in the same scroll direction is using a RecyclerView implementing NestedScrollingParent + PagerSnapHelper to get snapping.
You'd then have to implement the NestedScrollingParent/Child contract between parent/child RecyclerView instances.
pa...@cardinalblue.com <pa...@cardinalblue.com> #11
Cool, thanks for this quick answer - Both pieces of information are highly appreciated (rough estimate of tackling this as well as giving hint on how to do it).
I will try implementing what you suggested and in case it is readable code, I will post it here as sample project or somthing similar.
I will try implementing what you suggested and in case it is readable code, I will post it here as sample project or somthing similar.
ti...@google.com <ti...@google.com> #12
That'd be great, much appreciated!
hi...@gmail.com <hi...@gmail.com> #13
So...I was too stupid to understand the back and forth and up and down of NestedScrollingParent and NestedScrollingChild/NestedScrollingChild2 and NestedScrollingParentHelper and NestedScrollingChildHelper
But I figured out another way to achieve the same goal. I attached a demo project with the following setup:
1. A parent RecyclerView with PagerSnapHelper:
This vertical RecyclerView has two items/pages.
The upper page is just a simple TextView.
The lower page contains the nested RecyclerView.
Both pages are Fragments if that is of any concern.
2. A PagingLinearLayoutManager:
This is a LinearLayoutManager with the capability to enable/disable scrolling.
It is used for the parent RecyclerView.
3. A OnItemTouchListener:
This is also used for the parent RecyclerView.
It saved the initial y coordinate on ACTION_DOWN
During ACTION_MOVE event, it decides whether the PagingLinearLayoutManager is allowed to scroll (i.e. to switch between pages)
The important parts of the code are commented. Hope this helps someone else!
But I figured out another way to achieve the same goal. I attached a demo project with the following setup:
1. A parent RecyclerView with PagerSnapHelper:
This vertical RecyclerView has two items/pages.
The upper page is just a simple TextView.
The lower page contains the nested RecyclerView.
Both pages are Fragments if that is of any concern.
2. A PagingLinearLayoutManager:
This is a LinearLayoutManager with the capability to enable/disable scrolling.
It is used for the parent RecyclerView.
3. A OnItemTouchListener:
This is also used for the parent RecyclerView.
It saved the initial y coordinate on ACTION_DOWN
During ACTION_MOVE event, it decides whether the PagingLinearLayoutManager is allowed to scroll (i.e. to switch between pages)
The important parts of the code are commented. Hope this helps someone else!
mi...@fresha.com <mi...@fresha.com> #14
Same promble
jb...@google.com <jb...@google.com> #16
I'm a bit skeptical about the suggested solution from comment#15 that modifies the touch slop.
We're working on a solution that'll work reliably with ViewPager2 1.0. Seehttps://r.android.com/1131083 .
Not finalized at the time of writing, but might help some people already. Notice NestedScrollableHostLayout wrapping [1] a scrollable child.
[1]https://r.android.com/c/platform/frameworks/support/+/1131083/4/viewpager2/integration-tests/testapp/src/main/res/layout/item_horizontal_rvs.xml#55
We're working on a solution that'll work reliably with ViewPager2 1.0. See
Not finalized at the time of writing, but might help some people already. Notice NestedScrollableHostLayout wrapping [1] a scrollable child.
[1]
jb...@google.com <jb...@google.com> #17
Project: platform/frameworks/support
Branch: androidx-master-dev
commit 1316417bc87741ea9f739a453eb9e792512c9651
Author: Jelle Fresen <jellefresen@google.com>
Date: Tue Oct 01 16:58:57 2019
Add sample of nested scrolling in ViewPager2
This shows how nested scrolling can be achieved in ViewPager2. Every
child on a page that scrolls in the same direction as ViewPager2 must be
wrapped by a NestedScrollableHostLayout, and one must make sure that the
scrollable child implements canScrollHorizontally/Vertically in order
for this to work.
Bug: 123006042
Test: Manual, run ViewPager2 demo app
Change-Id: I79e24b7668cf7ff5c05c350ea3ab9134dd74b3a4
M viewpager2/integration-tests/testapp/src/main/AndroidManifest.xml
M viewpager2/integration-tests/testapp/src/main/java/androidx/viewpager2/integration/testapp/BrowseActivity.kt
A viewpager2/integration-tests/testapp/src/main/java/androidx/viewpager2/integration/testapp/NestedScrollableHost.kt
A viewpager2/integration-tests/testapp/src/main/java/androidx/viewpager2/integration/testapp/ParallelNestedScrollingActivity.kt
A viewpager2/integration-tests/testapp/src/main/res/layout/item_nested_recyclerviews.xml
M viewpager2/integration-tests/testapp/src/main/res/values/colors.xml
M viewpager2/integration-tests/testapp/src/main/res/values/strings.xml
https://android-review.googlesource.com/1131083
https://goto.google.com/android-sha1/1316417bc87741ea9f739a453eb9e792512c9651
Branch: androidx-master-dev
commit 1316417bc87741ea9f739a453eb9e792512c9651
Author: Jelle Fresen <jellefresen@google.com>
Date: Tue Oct 01 16:58:57 2019
Add sample of nested scrolling in ViewPager2
This shows how nested scrolling can be achieved in ViewPager2. Every
child on a page that scrolls in the same direction as ViewPager2 must be
wrapped by a NestedScrollableHostLayout, and one must make sure that the
scrollable child implements canScrollHorizontally/Vertically in order
for this to work.
Bug: 123006042
Test: Manual, run ViewPager2 demo app
Change-Id: I79e24b7668cf7ff5c05c350ea3ab9134dd74b3a4
M viewpager2/integration-tests/testapp/src/main/AndroidManifest.xml
M viewpager2/integration-tests/testapp/src/main/java/androidx/viewpager2/integration/testapp/BrowseActivity.kt
A viewpager2/integration-tests/testapp/src/main/java/androidx/viewpager2/integration/testapp/NestedScrollableHost.kt
A viewpager2/integration-tests/testapp/src/main/java/androidx/viewpager2/integration/testapp/ParallelNestedScrollingActivity.kt
A viewpager2/integration-tests/testapp/src/main/res/layout/item_nested_recyclerviews.xml
M viewpager2/integration-tests/testapp/src/main/res/values/colors.xml
M viewpager2/integration-tests/testapp/src/main/res/values/strings.xml
j....@gmail.com <j....@gmail.com> #18
We have now merged a working example of ViewPager2 with nested scrollable elements in both: same and orthogonal orientation. See the sample under: https://goo.gle/viewpager2-sample
Notice how the scrollable children of ViewPager2 are wrapped in NestedScrollableHost -- optional for orthogonal elements, required for same-orientation elements.
Notice how the scrollable children of ViewPager2 are wrapped in NestedScrollableHost -- optional for orthogonal elements, required for same-orientation elements.
ma...@gmail.com <ma...@gmail.com> #19
Thank you. That example definitely helps getting that to work. Are there any plans in future to make it work out of the box with with an option to enable that?
al...@gmail.com <al...@gmail.com> #20
More research is needed to decide on the approach, e.g. bundling NestedScrollableHost equivalent in the ViewPager2 package, or other solutions we're considering. Getting feedback on NestedScrollableHost would definitely be useful.
We're keeping this bug open to track effort in the area.
We're keeping this bug open to track effort in the area.
ir...@gmail.com <ir...@gmail.com> #21
I copied the source code for the NestedScrollableHost, and it worked perfectly in my layout. (Horizontal ViewPager2 -> Vertical NestedScrollView -> ConstraintLayout -> NestedScrollableHost -> Horizontal RecyclerView)
It worked just as I would expect it to work. A fling inside of the host flinged the recyclerview to the end. A second fling in the same direction changed the page in the viewpager. I had to lift my finger during a scroll all the way to the end of the recyclerview to get the viewpager to page. Great results.
It worked just as I would expect it to work. A fling inside of the host flinged the recyclerview to the end. A second fling in the same direction changed the page in the viewpager. I had to lift my finger during a scroll all the way to the end of the recyclerview to get the viewpager to page. Great results.
al...@gmail.com <al...@gmail.com> #22
I ran into (what might be) a similar issue. I have a similar view hierarchy as described in https://issuetracker.google.com/issues/123006042#comment21 . In my use case, a difference might be the horizontal recyclerview is used to show images being queued up for a post. After adding enough images for the recyclerview to be wide enough to scroll the hierarchies should be very similar. However, I noticed that simply tapping in the window after adding the last image to make the recyclerview wide enough to scroll, _then_ scrolling, everything works as expected. Even without the workaround (NestedScrollableHost). AFAICT, the problem seems to be a focus or event suppression issue higher in the view hierarchy. I found this after trying to use NestedScrollableHost and noticing that the class' overridden function wasn't called until after a single tap had occurred. I'm guessing that it's related to ACTION_UP handling, since an initial tap and drag initiates an ACTION_DOWN and it doesn't work.
il...@google.com <il...@google.com> #23
Replying to #comment22 , thanks for sharing the observation regarding the behaviour with NestedScrollableHost.
To clarify, does the scrolling functionality work correctly with NestedScrollableHost (both: with 'pre-tap' and directly)?
To clarify, does the scrolling functionality work correctly with NestedScrollableHost (both: with 'pre-tap' and directly)?
el...@gmail.com <el...@gmail.com> #24
Nope. The pre-scroll tap is required both with and without NestedScrollableHost.
Description
Version used: 2.7.1
Devices/Android versions reproduced on: Pixel 7
Using the navigation compose in the previous version I was able to immediately navigate away from the landing screen, if the user is logged in, with a nice crossfade animation playing between my landing screen and main screen. See: it-was-working-in-2.7.0-beta02.mp4
Upon updating the experience has gotten worse: when navigating away from the landing screen (while it's enter animation hasn't finished yet), a weird inflating animation is playing. See: expanding-bug.mp4
Since these are only cross fade animations the size of the container should never change. Why does the size of the container animating for a simple crossfade animation?
Expected behavior:
Since the size of the initial screen doesn't change during it's enter transition, I would expect the second screen to only play a fade in animation without the weird clipping/size changing that's happening at the moment.
Code to reproduce: (see also NavHostBugReport.zip)
```
NavHostBugReportTheme {
// A surface container using the 'background' color from the theme
Surface(
modifier = Modifier.fillMaxSize(),
color = MaterialTheme.colorScheme.background
) {
val navController = rememberNavController()
NavHost(navController = navController, "@landing") {
navigation("landing", "@landing") {
composable("landing") {
Box(modifier = Modifier
.fillMaxSize()
.background(Color.Red))
LaunchedEffect(key1 = Unit) {
navController.navigate("main")
}
}
}
navigation("main", "@main") {
composable("main") {
Box(modifier = Modifier
.fillMaxSize()
.background(Color.Blue))
}
}
}
}
}
```
If this is a bug in the library, we would appreciate if you could attach:
- Sample project to trigger the issue. (attached: NavHostBugReport.zip)
- A screenrecord or screenshots showing the issue (if UI related).
working correctly in 2.7.0-beta02: it-was-working-in-2.7.0-beta02.mp4
working unexpectedly in 2.7.1: expanding-bug.mp4