1. /**
  2. * Fragment 加载网络请求
  3. */
  4. public abstract class BaseLoadDataForNetFragment extends Fragment {
  5.  
  6. // 视图是否初始化完成
  7. protected boolean isViewInitiated;
  8. // 界面是否可见
  9. protected boolean isVisibleToUser;
  10. // 数据是否加载
  11. protected boolean isDataInitiated;
  12.  
  13. @Override
  14. public void onActivityCreated(Bundle savedInstanceState) {
  15. super.onActivityCreated(savedInstanceState);
  16. isViewInitiated = true;
  17. prepareFetchData();
  18. }
  19.  
  20. @Override
  21. public void setUserVisibleHint(boolean isVisibleToUser) {
  22. super.setUserVisibleHint(isVisibleToUser);
  23. this.isVisibleToUser = isVisibleToUser;
  24. prepareFetchData();
  25. }
  26.  
  27. private void prepareFetchData() {
  28. // 不设置为需要每次可见的时候都强制刷新界面
  29. prepareFetchData(false);
  30. }
  31.  
  32. /**
  33. * 设置true,可强制刷新界面
  34. *
  35. * @param forceUpdate 是否强制刷新界面
  36. * @return
  37. */
  38. protected void prepareFetchData(boolean forceUpdate) {
  39. if (isVisibleToUser && isViewInitiated && (!isDataInitiated || forceUpdate)) {
  40. fetchDataForNet();
  41. isDataInitiated = true;
  42. }
  43. }
  44.  
  45. /**
  46. * 刷新数据,网络刷新数据
  47. */
  48. public abstract void fetchDataForNet();
  49.  
  50. }

fragment中请求网络。。

子fagnment 复用已经加载的数据

  1. @Nullable
  2. @Override
  3. public View onCreateView(@NonNull LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {
  4. WLog.d("onCreateView");
  5.  
  6. View mView = inflater.inflate(R.layout.fragment_my_order, container, false);
  7. mNoDataTV = (TextView) mView.findViewById(R.id.fragment_order_tv_no_data);
  8. mShowLoading = (LinearLayout) mView.findViewById(R.id.fragment_order_ll_loading);
  9.  
  10. // 子界面可以重用网络加载的数据
  11. if (isDataInitiated) {
  12. WLog.d("数据已经加载过...无需再次请求数据");
  13. //mShowLoading.setVisibility(View.GONE);
  14. //mNoDataTV.setVisibility(View.VISIBLE);
  15. }
  16.  
  17. return mView;
  18. }

BaseLoadDataForNetFragment的更多相关文章

随机推荐

  1. vue-实现倒计时功能

    JavaScript 创建一个 countdown 方法,用于计算并在控制台打印距目标时间的日.时.分.秒数,每隔一秒递归执行一次. msec 是当前时间距目标时间的毫秒数,由时间戳相减得到,我们将以 ...

  2. [转载]关于python字典类型最疯狂的表达方式

    一个Python字典表达式谜题 让我们探究一下下面这个晦涩的python字典表达式,以找出在python解释器的中未知的内部到底发生了什么. # 一个python谜题:这是一个秘密 # 这个表达式计算 ...

  3. 6:django 通用视图

    上一节我们介绍了django视图函数里面几个常用的函数,这节我们来看一下django为我们提供的一些通用视图吧 在最后面有我自己的示例代码,html部分太多了就不贴了 “简单”视图函数 正如名字所言, ...

  4. LeetCode解题报告—— 4Sum & Remove Nth Node From End of List & Generate Parentheses

    1. 4Sum Given an array S of n integers, are there elements a, b, c, and d in S such that a + b + c + ...

  5. LeetCode解题报告—— 1-bit and 2-bit Characters & 132 Pattern & 3Sum

    1. 1-bit and 2-bit Characters We have two special characters. The first character can be represented ...

  6. 关于云平台中OFFICE预览与视频预览的解决办法

    最近,随着firefox x64的升级,出现flash插件完全被禁止的现象,html5替换是大势所趋,原来我们在云平台中有多处使用flash的地方,比如OFFICE预览,视频播放,游戏等,现对于OFF ...

  7. kubernetes如何要使用用户名和密码登陆harbor以拉取docker镜像,应该如何操作?

    还好,网上有相应的CASE处理. http://www.jianshu.com/p/ffbfb44dc496 =========================== 先生成名为为regsecret的S ...

  8. PHP数组转对象,对象转数组

    废话不多,直接上代码: <?php class object_array{ //数组转对象 public static function array_to_object($e){ if(gett ...

  9. AC日记——自然数和分解 codevs 2549

    自然数和分解 思路: 水题: 代码: #include <bits/stdc++.h> using namespace std; ][]; int main() { cin>> ...

  10. 封装ajax支持get、post

    为什么要封装ajax,因为…… for(var i=0;i<20;i++){ $.ajax(……) } 的时候,整个页面都卡死了,于是,我开始找答案. 后来,找到了,就是jquery的ajax属 ...