Giter VIP home page Giter VIP logo

Comments (9)

zhpanvip avatar zhpanvip commented on May 31, 2024 1

关于第一个问题大概看了一下。因为没用过epoxy这个库,所以不太了解它的工作原理。但是刚才调试时候发现不管shouldSaveViewState返回true还是false,BannerViewPager都会被重新初始化(BannerModel的bind方法被调用),猜测唯一不同的地方就是返回true时会保存下BannerViewPager的状态,而返回false时不会保存。在保存了状态的情况下,BannerViewPager划出屏幕再化回来OnPageSelected会被调用两次,第一次position是正确的,第二次position是0(也就是saveState保存的状态是0,不知道它是根据什么保存的,或许就没保存...),BannerViewPager拿到position后会去通过BannerUtils.getRealPosition(isCanLoop(), position, mList.size())变换一下position,就成了2,所以就出现了你说的选中了最后一个的问题。但是具体epoxy是怎么去saveState的,为什么会保存position为0这个不太清楚,具体得看那个库是怎么实现的了。

当shouldSaveViewState返回false时状态不会被保存,但是每次都会重新初始化BannerViewPager,所以每次划出去再划回来就会重新从0开始。不过这个貌似也无解啊,毕竟每次都会重新创建。。

from bannerviewpager.

zhpanvip avatar zhpanvip commented on May 31, 2024 1

这个问题我可以改下BannerViewPager来兼容一下epoxy,但是并不能证明这个bug是BannerViewPager的。这个优化应该会在下个版本2.5.1发。

from bannerviewpager.

zhpanvip avatar zhpanvip commented on May 31, 2024

1.BannerViewPager目前确实没有考虑被回收的情况。这个问题在后续版本可以优化。
2.针对每个item控制展示时间?这个需求确实挺奇葩的..可以尝试下setPageChangeListener,然后根据position设置duration?

from bannerviewpager.

zhpanvip avatar zhpanvip commented on May 31, 2024

问下你现在用的是哪个版本?

from bannerviewpager.

hlla avatar hlla commented on May 31, 2024

问下你现在用的是哪个版本?

最新版本的,上边demo就是在你demo添加了第4个底部tab,和epoxy一块儿使用,内容和homeFragment一样

from bannerviewpager.

zhpanvip avatar zhpanvip commented on May 31, 2024

我拉你代码看下吧,debug包装不了。

from bannerviewpager.

hlla avatar hlla commented on May 31, 2024

2.针对每个item控制展示时间?这个需求确实挺奇葩的..可以尝试下setPageChangeListener,然后根据position设置duration?
大佬,按你说的可以设置每个item的展示时间了

@Override
public void onPageSelected(int position) {
                        super.onPageSelected(position);
                        Timber.d("当前position:%d", position);
                        long time = adverts.get(position).getTime() * 1000;
                        Timber.d("当前item的理论时间:%d", time);
                        bannerViewPager.setInterval((int) time);
                    }

from bannerviewpager.

hlla avatar hlla commented on May 31, 2024

一直没更新,今天试了试3.x最新版的 , 在epoxy中使用,保存banner的View State,可以记住banner的滑动位置,会从最后一个item开始显示,demo tab5

from bannerviewpager.

zhpanvip avatar zhpanvip commented on May 31, 2024

一直没更新,今天试了试3.x最新版的 , 在epoxy中使用,保存banner的View State,可以记住banner的滑动位置,会从最后一个item开始显示,demo tab5

Epoxy会在创建ViewHolder的时候先对状态进行保存,此时BVP还没有create,由于BVP当前版本中使用的是ViewPager2,而由于Epoxy初始化时状态保存会触发ViewPager2保存状态,也就是把currentItem=0保存了下来。当BVP调用了create,并设置currentItem=MAX_VALUE/2后,ViewPager2又进行了状态恢复将BVP的currentItem重置为了0。所以会出现这样的问题,目前看来没有太好的解决办法。。

from bannerviewpager.

Related Issues (20)

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.