返回

震撼来袭!静态代理重构ViewPagerIndicator,带你看重构的那些经验

Android

ViewPagerIndicator的代码可谓一波三折,在不久前ViewPagerIndicator作为一个单独的仓库从BannerViewPager中拆分了出来。拆分后的indicator已经不仅仅适用于BannerViewPager,还可以用于ViewPager和ViewP...。

在重构之前,ViewPagerIndicator依赖于BannerViewPager的上下文,并且使用静态代理的方式来实现BannerViewPager的监听事件。在重构时,我们遇到了很多问题,比如说:

  • ViewPagerIndicator如何获得ViewPager的上下文?
  • ViewPagerIndicator如何监听ViewPager的滑动事件?
  • ViewPagerIndicator如何与ViewPager的适配器进行通信?

为了解决这些问题,我们采用了一种新的设计模式——静态代理。静态代理模式可以将一个类的接口封装到另一个类中,从而实现对类的透明代理。

在我们的场景中,我们将ViewPagerIndicator包装成一个静态代理类,并将其注入到ViewPager中。这样,ViewPager就可以通过静态代理类来调用ViewPagerIndicator的方法。

public class ViewPagerIndicatorWrapper implements ViewPager.OnPageChangeListener {

    private ViewPagerIndicator indicator;

    public ViewPagerIndicatorWrapper(ViewPagerIndicator indicator) {
        this.indicator = indicator;
    }

    @Override
    public void onPageScrolled(int position, float positionOffset, int positionOffsetPixels) {
        indicator.onPageScrolled(position, positionOffset, positionOffsetPixels);
    }

    @Override
    public void onPageSelected(int position) {
        indicator.onPageSelected(position);
    }

    @Override
    public void onPageScrollStateChanged(int state) {
        indicator.onPageScrollStateChanged(state);
    }
}

然后,我们在ViewPager中使用静态代理类来监听ViewPager的滑动事件。

ViewPager viewPager = (ViewPager) findViewById(R.id.view_pager);
ViewPagerIndicatorWrapper wrapper = new ViewPagerIndicatorWrapper(indicator);
viewPager.addOnPageChangeListener(wrapper);

这样,ViewPagerIndicator就可以通过静态代理类来监听ViewPager的滑动事件了。

除了上述问题之外,我们在重构过程中还遇到了很多其他的问题。比如,ViewPagerIndicator如何与ViewPager的适配器进行通信?ViewPagerIndicator如何处理ViewPager的销毁?ViewPagerIndicator如何处理ViewPager的数据变化?

我们都一一解决了这些问题,并最终完成了ViewPagerIndicator的重构。

重构后的ViewPagerIndicator更加灵活,可以更方便地应用于不同的场景。同时,重构后的ViewPagerIndicator也更加稳定,可以更好地处理各种各样的异常情况。

以上就是我们重构ViewPagerIndicator的一些经验分享。希望这些经验能够对大家有所帮助。

如果您想了解更多关于ViewPagerIndicator的重构经验,请随时与我们联系。