Fragment实现懒加载以及简单封装
来源:互联网 发布:色容差计算软件 编辑:程序博客网 时间:2024/06/11 03:32
首先是实现懒加载的Fragment
public abstract class LazyLoadFragment extends Fragment{ protected boolean isViewInitiated; protected boolean isVisibleToUser; protected boolean isDataInitiated; @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); } @Override public void onActivityCreated(Bundle savedInstanceState) { super.onActivityCreated(savedInstanceState); isViewInitiated = true; prepareFetchData(); } @Override public void setUserVisibleHint(boolean isVisibleToUser) { super.setUserVisibleHint(isVisibleToUser); this.isVisibleToUser = isVisibleToUser; prepareFetchData(); } //网络请求在这里进行 public abstract void fetchData(); public boolean prepareFetchData() { return prepareFetchData(false); } public boolean prepareFetchData(boolean forceUpdate) { /** * 当前fragment对用户可见并且已经初始化并且还未加载数据 * 则调用fetchData方法,即在可这里进行网络加载数据 * 加载数据后使isDataInitiated为false确保不重复加载数据 */ if (isVisibleToUser && isViewInitiated && (!isDataInitiated || forceUpdate)) { fetchData(); isDataInitiated = true; return true; } return false; } protected Fragment getRootFragment() { Fragment fragment = getParentFragment(); while (fragment.getParentFragment() != null) { fragment = fragment.getParentFragment(); } return fragment; }}
BaseFragment
public abstract class BaseFragment extends LazyLoadFragment{ protected View rootView; private Intent intent; //获取fragment布局文件ID protected abstract int setLayoutId(); //进行初始化的方法 protected abstract void init(View view, Bundle savedInstanceState); @Override public void onCreate(@Nullable Bundle savedInstanceState) { super.onCreate(savedInstanceState); setHasOptionsMenu(true); } @Nullable @Override public View onCreateView(LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) { if (rootView == null){ rootView = inflater.inflate(setLayoutId(), container, false); ButterKnife.bind(this, rootView); init(rootView, savedInstanceState); } return rootView; } @Override public void onDestroyView() { super.onDestroyView(); ((ViewGroup) rootView.getParent()).removeView(rootView); } protected void ChangeActivity(Class<?> cls,boolean isFinish){ intent = new Intent(getActivity(),cls); startActivity(intent); if (isFinish) getActivity().finish(); }}
使用
public class DemoFragment extends BaseFragment { @Override protected int setLayoutId() { //这里直接返回fragment的布局文件id即可 return 0; } @Override protected void init(View view, Bundle savedInstanceState) { //这里进行初始化操作 } @Override public void fetchData() { //这里进行网络请求 }}
0 0
- Fragment实现懒加载以及简单封装
- Fragment + viewpager 实现 懒加载 封装
- Android Fragment懒加载简单实现
- Android Fragment懒加载简单实现
- Fragment实现懒加载
- Fragment实现懒加载
- Fragment实现懒加载
- 封装篇——Fragment懒加载
- Android 封装Fragment-BaseLazyFragment(懒加载)
- ViewPager实现Fragment懒加载
- Android Fragment实现懒加载
- viewpager fragment 实现懒加载
- Android Fragment 实现懒加载
- ViewPager + Fragment实现懒加载
- ViewPager+Fragment实现懒加载
- ViewPager+Fragment实现懒加载
- Android 实现fragment懒加载
- Activity,Fragment的基类封装,简化findViewById,Fragment懒加载和不重复加载等
- C++ 不用std::queue 实现读取网络字节缓冲去的队列
- TCP连接的坑总结
- 后缀表达式与中缀表达式互转的理论知识【转】
- 现代编译原理 第一章
- 1040. Longest Symmetric String (25)
- Fragment实现懒加载以及简单封装
- typedef 函数指针的用法2
- Spring学习笔记-WebServive
- [莫队] [分块] [BZOJ3585] mex
- 梯度下降,随机梯度下降,mini-batch梯度下降
- assert()函数用法总结
- 组态软件intouch、ifix、wincc
- VC++ MFC实现一个简易聊天(客户端篇)(逻辑解耦)
- 笔试题5