android / views-widgets-samples

Multiple samples showing the best practices in views-widgets on Android.
Apache License 2.0
5.07k stars 3.01k forks source link

ViewPager2 - slight disappointment. #252

Open recodyx opened 1 year ago

recodyx commented 1 year ago

ViewPager2 is definitely not an improvement over ViewPager from my point of view.

Sorry I'm migrating from ViewPager right now and it's terrible.

  1. since always the method to add a listener was called add/setXXXListener. Now it's called registerXXXCallback. What's the point? Just wanted to be different?
  2. the "OnPageChangeCallback" is not an interface but an abstract class. WHY? God in heaven, why? This is a disaster. My fragment used to implement interface. Now I have to create a class, which I then have to connect to fragment somehow.... Custom ListenerInterface....
  3. now need TabLayoutMediator to link TabLayout with ViewPager2... why not just viewPager.attach(tabLayout) or something. Or why not do it the old way, when the TabLayout was part of ViewPager in layout xml, and thus linked.

Overall our code has become much more complex and less readable. Too bad.

damon-beaven commented 1 year ago

I agree. The last I checked ViewPager2 does not support instantiateItem(). I have places in my codebase where I have opted to keep ViewPager b/c of issues like this. For example, you will need instantiateItem() in your fragment's onMapSharedElements() if you are going to set a transition animation into an element that is in a ViewPager. You can't do this w/ ViewPager2.

calsurferpunk commented 3 weeks ago

I agree 100%. I couldn't stop getting: java.lang.IllegalStateException: Page(s) contain a ViewGroup with a LayoutTransition (or animateLayoutChanges="true"), which interferes with the scrolling animation No matter what I updated, it would constantly crash. Even setting setAnimateParentHierarchy(false) on any ViewGroup proved useless. I don't know how they could deprecate ViewPager for something so buggy.