flexbox-layout
flexbox-layout copied to clipboard
Justify content is broken
Description
After FlexboxLayoutManager
is restored from saved state, i.e. fragment is re added via ViewPager
all items are shifted up or down.
When FlexboxLayoutManager
saves state, it saves getDecoratedLeft()
to mAnchorOffset
and after restore it eventually applies left
to childTop
so all children is shifted up or down
Issues and steps to reproduce
Preconditions
- Create new fragment with a
RecyclerView
:
recyclerView.layoutManager = FlexboxLayoutManager(context).apply {
flexDirection = FlexDirection.ROW
flexWrap = FlexWrap.NOWRAP
justifyContent = JustifyContent.SPACE_EVENLY
}
- Re add fragment to force
FlexboxLayoutManager
to be restored from saved instance
Demo
When items are added the first time top
is 0
:
MyTextView@3d17f07 layout: l = [123], t = [0], r = [237], b = [75]
MyTextView@ba1665d layout: l = [483], t = [0], r = [597], b = [75]
MyTextView@17d04a3 layout: l = [843], t = [0], r = [957], b = [75]
MyTextView@3d17f07 layout: l = [123], t = [0], r = [237], b = [75]
MyTextView@ba1665d layout: l = [483], t = [0], r = [597], b = [75]
MyTextView@17d04a3 layout: l = [843], t = [0], r = [957], b = [75]
MyTextView@3d17f07 layout: l = [123], t = [0], r = [237], b = [75]
MyTextView@ba1665d layout: l = [483], t = [0], r = [597], b = [75]
MyTextView@17d04a3 layout: l = [843], t = [0], r = [957], b = [75]
When flex box is restored from saved instance top is now equals fist item left value, i.e. 123
:
MyTextView@824fdfc layout: l = [123], t = [123], r = [237], b = [198]
MyTextView@d49dada layout: l = [483], t = [123], r = [597], b = [198]
MyTextView@6c1fde8 layout: l = [843], t = [123], r = [957], b = [198]
MyTextView@824fdfc layout: l = [123], t = [48], r = [237], b = [123]
MyTextView@d49dada layout: l = [483], t = [48], r = [597], b = [123]
MyTextView@6c1fde8 layout: l = [843], t = [48], r = [957], b = [123]
MyTextView@824fdfc layout: l = [123], t = [123], r = [237], b = [198]
MyTextView@d49dada layout: l = [483], t = [123], r = [597], b = [198]
MyTextView@6c1fde8 layout: l = [843], t = [123], r = [957], b = [198]
MyTextView@824fdfc layout: l = [123], t = [48], r = [237], b = [123]
MyTextView@d49dada layout: l = [483], t = [48], r = [597], b = [123]
MyTextView@6c1fde8 layout: l = [843], t = [48], r = [957], b = [123]
Affected JustifyContent
:
-
SPACE_AROUND
-
CENTER
-
SPACE_EVENLY
-
FLEX_END
Note: the only one that is working fine is FLEX_START
and SPACE_BETWEEN
Expected behavior
All items should be shown
Version of the flexbox library
-
1.1.0
-
2.0.1
Workaround
There is a temporary workaround that may not work for everyone - disable save state:
recyclerView.isSaveEnabled = false
Link to code
https://github.com/vovkab/flexbox-space-evenly-bug
Original video:
https://drive.google.com/file/d/1D7MRqiUx2kRfvAHp4AJKJcRI_l73Eobx/view?usp=sharing