云豹直播app对fragment替换方案的思考

fragment是google将界面逻辑拆分成多个模块的一种思路实现,属于轻量级的一种activity,使得很多逻辑可以进行复用和重组.但是在使用的过程中,可能会出现各种各样的令人头疼的问题,而且fragment的实现的生命周期过于复杂。如何我们可以学习这种思路,制定一种更轻量的更加风险可控的组件,有助于我们更好的编写app,下面介绍云豹直播app的ViewProxy的简单用法.

一.基本使用

Activity添加ViewProxy,跟Fragment的使用方式类

  1. VideoPlayerViewProxy videoPlayerViewProxy=new VideoPlayerViewProxy();
    getViewProxyMannger().addViewProxy(mContainer,videoPlayerViewProxy,videoPlayerViewProxy.getDefaultTag());

    在ViewProxy嵌套ViewProxy,需要使用

    getViewProxyChildMannger:
    SearchViewProxy searchViewProxy=new SearchViewProxy();
    searchViewProxy.setHint(getString(R.string.please_input_teacher_or_curse));
    getViewProxyChildMannger().addViewProxy(vpSeachContainer,searchViewProxy,searchViewProxy.getDefaultTag());

    Viewpager中使用ViewProxy:

  2. List<RxViewProxy> viewProxyList = Arrays.asList(
            mHomePageViewProxy,
            mHomeProjectCenterViewProxy,
            mHomeMessageViewProxy,
            mHomeUserCenterViewProxy);
    mViewPager.setOffscreenPageLimit(viewProxyList.size());
    ViewProxyPageAdapter mViewPagerAdapter = new ViewProxyPageAdapter(getViewProxyMannger(), viewProxyList);
    mViewPagerAdapter.isPrint=true;
    mViewPagerAdapter.attachViewPager(mViewPager);

    二.ViewProxy中对fragment的补充:

    setUserVisibleHint方法完善,确保绝对调用,懒加载的时候不用去判断是否是第一次加载:

@Override
public void setUserVisibleHint(boolean isVisibleToUser) {
    super.setUserVisibleHint(isVisibleToUser);
     if(isVisibleToUser&&mRefreshView!=null){
        mRefreshView.initData();
     }
}

添加backpress事件的拦截,返回true的情况会拦截back事件,做相应的处理,不必去回调activity进行处理,避免逻辑的不清晰:

@Override
public boolean onBackPressed() {
    if(this.getResources().getConfiguration().orientation == Configuration.ORIENTATION_LANDSCAPE){
        toggleScreen();
        return true;
    }
    return false;
}

模拟actvity启动的方式,实现viewProxy进行内部导航:

public void startViewProxy(Map<String,Object>argMap,@Nullable Class<? extends BaseViewProxy>cs,String tag){
    try {
        BaseViewProxy baseViewProxy= cs.newInstance();
        mViewProxyMannger.addStack(mParentLayoutGroup,baseViewProxy,tag);
    }catch (Exception e){
        e.printStackTrace();
    }
}
发布了150 篇原创文章 · 获赞 65 · 访问量 17万+

猜你喜欢

转载自blog.csdn.net/yb1314111/article/details/105072846
今日推荐