Status Update
Comments
fl...@check24.de <fl...@check24.de> #2
I feel like this is a serious issue that should get more attention. When working with RecyclerViews you had the possibility of setting up if a ViewHolder is able the be recycled.
All the solutions to circumvent this problem here are either hacks in regards to how the Keyboard is opened, or you ditch LazyColumn completely and use a Column, which is not a solution for complex layouts.
mr...@gmail.com <mr...@gmail.com> #3
lc...@gmail.com <lc...@gmail.com> #4
and cause the other focusable element could not access touch
ke...@gmail.com <ke...@gmail.com> #5
We should have some API to pin an item to indicate that we want to keep it around and not dispose it.
Please don't make this API internal, make it public for everyone to use and also allow this API to be used with any kind of items inside of LazyLayout's (not only focusable items). I have described why I need it in this issue
bl...@gmail.com <bl...@gmail.com> #6
Related in spirit:
STOP MAKING ALL USEFUL APIS INTERNAL
bl...@gmail.com <bl...@gmail.com> #7
This issue is also relevant to text selection, where selection should be able to cross items of a LazyColumn
(wrapped in a SelectionContainer
). Items with a selection inside should not be removed from the composition, but the handles disappear when the first element containing any selected text is scrolled out of view. See attached video for illustration.
Although, sometimes it is desired behaviour. Maybe add a flag whether to persist the node?
[Deleted User] <[Deleted User]> #8
pe...@infraspeak.com <pe...@infraspeak.com> #9
ma...@kraken.tech <ma...@kraken.tech> #10
mr...@gmail.com <mr...@gmail.com> #11
mr...@gmail.com <mr...@gmail.com> #12
wa...@gmail.com <wa...@gmail.com> #13
Any update?
gu...@googlemail.com <gu...@googlemail.com> #14
Any update?
an...@google.com <an...@google.com>
ap...@google.com <ap...@google.com> #15
Branch: androidx-main
commit 36abe1718e16025253df6f22cd786fc034447be5
Author: Andrey Kulikov <andreykulikov@google.com>
Date: Wed Nov 16 19:27:22 2022
Add items pinning functionality to the lazy lists
Lazy lists now provide an instance of PinnableContainer via LocalPinnableContainer for each item. It allows to pin the current item from inside the content of the item. Pinning means we will continue composing, measuring and placing this item even when it is scrolled away from the view. Note that the placed position is not guaranteed to be the real one as we do not compose the items in between the pinned one and the first/last visible one.
This interface was added to the ui module as conceptually PinnableContainer is decoupled from lazy layouts from the foundation module. Other layouts using SubcomposeLayout could have some similar functionality and may want to support pinning. And it will allow for modifiers from ui to use this interface to pin their content.
Test: LazyListPinnableContentTest
Fixes: 259274257
Fixes: 195049010
Relnote: Introduced PinnableContainer api propagated by lazy lists via a composition local which allows to pin current item. This means such item will not be disposed when it is scrolled away from the view. For example, Modifier.focusable() will pin the current focused item via this mechanism.
Change-Id: Ib8881191a529c9d9dc5e886570650b1987763207
M compose/foundation/foundation/api/current.ignore
M compose/foundation/foundation/api/current.txt
M compose/foundation/foundation/api/public_plus_experimental_current.txt
M compose/foundation/foundation/api/restricted_current.ignore
M compose/foundation/foundation/api/restricted_current.txt
M compose/foundation/foundation/src/androidAndroidTest/kotlin/androidx/compose/foundation/FocusableTest.kt
D compose/foundation/foundation/src/androidAndroidTest/kotlin/androidx/compose/foundation/lazy/layout/PinnableParentTest.kt
M compose/foundation/foundation/src/androidAndroidTest/kotlin/androidx/compose/foundation/lazy/list/LazyListBeyondBoundsItemCountTest.kt
A compose/foundation/foundation/src/androidAndroidTest/kotlin/androidx/compose/foundation/lazy/list/LazyListPinnableContainerTest.kt
D compose/foundation/foundation/src/androidAndroidTest/kotlin/androidx/compose/foundation/lazy/list/LazyListPinningTest.kt
M compose/foundation/foundation/src/commonMain/kotlin/androidx/compose/foundation/Focusable.kt
M compose/foundation/foundation/src/commonMain/kotlin/androidx/compose/foundation/lazy/LazyList.kt
M compose/foundation/foundation/src/commonMain/kotlin/androidx/compose/foundation/lazy/LazyListItemProvider.kt
M compose/foundation/foundation/src/commonMain/kotlin/androidx/compose/foundation/lazy/LazyListMeasure.kt
A compose/foundation/foundation/src/commonMain/kotlin/androidx/compose/foundation/lazy/LazyListPinnableContainerProvider.kt
D compose/foundation/foundation/src/commonMain/kotlin/androidx/compose/foundation/lazy/LazyListPinningModifier.kt
M compose/foundation/foundation/src/commonMain/kotlin/androidx/compose/foundation/lazy/LazyListState.kt
M compose/foundation/foundation/src/commonMain/kotlin/androidx/compose/foundation/lazy/grid/LazyGridItemProvider.kt
M compose/foundation/foundation/src/commonMain/kotlin/androidx/compose/foundation/lazy/layout/LazyLayoutItemProvider.kt
D compose/foundation/foundation/src/commonMain/kotlin/androidx/compose/foundation/lazy/layout/PinnableParent.kt
M compose/foundation/foundation/src/commonMain/kotlin/androidx/compose/foundation/lazy/staggeredgrid/LazyStaggeredGridItemProvider.kt
M compose/ui/ui/api/current.txt
M compose/ui/ui/api/public_plus_experimental_current.txt
M compose/ui/ui/api/restricted_current.txt
A compose/ui/ui/src/commonMain/kotlin/androidx/compose/ui/layout/PinnableContainer.kt
M tv/tv-foundation/api/current.txt
M tv/tv-foundation/api/public_plus_experimental_current.txt
M tv/tv-foundation/api/restricted_current.txt
A tv/tv-foundation/src/androidTest/java/androidx/tv/foundation/lazy/list/LazyListPinnableContainerTest.kt
D tv/tv-foundation/src/main/java/androidx/tv/foundation/lazy/LazyListPinningModifier.kt
M tv/tv-foundation/src/main/java/androidx/tv/foundation/lazy/grid/LazyGridItemProvider.kt
M tv/tv-foundation/src/main/java/androidx/tv/foundation/lazy/list/LazyBeyondBoundsModifier.kt
M tv/tv-foundation/src/main/java/androidx/tv/foundation/lazy/list/LazyList.kt
M tv/tv-foundation/src/main/java/androidx/tv/foundation/lazy/list/LazyListBeyondBoundsInfo.kt
M tv/tv-foundation/src/main/java/androidx/tv/foundation/lazy/list/LazyListItemProvider.kt
M tv/tv-foundation/src/main/java/androidx/tv/foundation/lazy/list/LazyListMeasure.kt
A tv/tv-foundation/src/main/java/androidx/tv/foundation/lazy/list/LazyListPinnableContainerProvider.kt
M tv/tv-foundation/src/main/java/androidx/tv/foundation/lazy/list/LazyListState.kt
lo...@gmail.com <lo...@gmail.com> #16
Will there be a way to know when the Composable position is known to be accurate, and that it's visible? Would be helpful for, say a video player, or anything you could think about that needs to do things only if visible.
an...@google.com <an...@google.com> #17
na...@google.com <na...@google.com> #18
The following release(s) address this bug.It is possible this bug has only been partially addressed:
androidx.compose.foundation:foundation:1.4.0-alpha04
androidx.compose.ui:ui:1.4.0-alpha04
pr...@google.com <pr...@google.com> #19
The following release(s) address this bug.It is possible this bug has only been partially addressed:
androidx.tv:tv-foundation:1.0.0-alpha04
Description
When a focused text field is scrolled out of view, it is disposed, which causes the keyboard to be dismissed.
We should have some API to pin an item to indicate that we want to keep it around and not dispose it.
This will enable the focused item to stay focused, and when the user continues typing, we can bring this item into view.