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