zoukankan      html  css  js  c++  java
  • ViewPager中Fragment的重复创建、复用问题

         在ViewPager中的Fragment的生命周期  随着页面的切换 当前的展示页相邻的页面生命周期一直在变化

       一开始 刚进入Activity时候,ViewPager默认初始化好前两个Fragment(消息和任务)

    消息 ->任务

    05-09 14:47:39.593 31509-31509/tyh.com.tablayout E/TYH: 团队onAttach
    05-09 14:47:39.593 31509-31509/tyh.com.tablayout E/TYH: 团队onCreate
    05-09 14:47:39.593 31509-31509/tyh.com.tablayout E/TYH: 团队onCreateView
    05-09 14:47:39.603 31509-31509/tyh.com.tablayout E/TYH: 团队onStart
    05-09 14:47:39.603 31509-31509/tyh.com.tablayout E/TYH: 团队onResume

    任务 ->团队

    5-09 14:55:26.932 31509-31509/tyh.com.tablayout E/TYH: 消息onPause
    05-09 14:55:26.932 31509-31509/tyh.com.tablayout E/TYH: 消息onStop
    05-09 14:55:26.932 31509-31509/tyh.com.tablayout E/TYH: 消息onDestroyView
    05-09 14:55:26.932 31509-31509/tyh.com.tablayout E/TYH: 部门onAttach
    05-09 14:55:26.932 31509-31509/tyh.com.tablayout E/TYH: 部门onCreate
    05-09 14:55:26.942 31509-31509/tyh.com.tablayout E/TYH: 部门onCreateView
    05-09 14:55:26.942 31509-31509/tyh.com.tablayout E/TYH: 部门onStart
    05-09 14:55:26.942 31509-31509/tyh.com.tablayout E/TYH: 部门onResume

    团队 ->部门

    05-09 14:57:18.371 31509-31509/tyh.com.tablayout E/TYH: 任务onPause
    05-09 14:57:18.371 31509-31509/tyh.com.tablayout E/TYH: 任务onStop
    05-09 14:57:18.371 31509-31509/tyh.com.tablayout E/TYH: 任务onDestroyView

    部门 ->团队

    05-09 15:00:50.918 31509-31509/tyh.com.tablayout E/TYH: 任务onCreateView
    05-09 15:00:50.918 31509-31509/tyh.com.tablayout E/TYH: 任务onStart
    05-09 15:00:50.918 31509-31509/tyh.com.tablayout E/TYH: 任务onResume

        你会发现 当 Fragment完成onCreate之后再去切换的时候  只会执行onCreateView和onDestroyView方法不会再去onCreate

    那么如何避免重复的创建和销毁呢  解决方案如下:

    方案一(不推荐):

    mViewPager.setOffscreenPageLimit(4);

    方案二(推荐):

    @Override
    public View onCreateView(LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {
    if(view==null){
    view = inflater.inflate(R.layout.contentfragment,container,false);
    tvContent = (TextView) view.findViewById(R.id.tv_content);
    String string = getArguments().getString(KEY);
    tvContent.setText(string);
    tvContent.setTextColor(Color.BLUE);
    tvContent.setTextSize(30);
    }
    return view;
    }
    @Override
    public void onDestroyView() {
    super.onDestroyView();
    if(view!=null){
    view.getParent().remove(view);
    }
    }

        如此当重新创建Fragment的时候就会复用之前创建好的View不会重复创建

  • 相关阅读:
    .NETCORE CONSUL
    Jenkins+github自动化部署.Net Core程序到Docker
    CleanArchitecture原则CQRS模式
    BFF架构了解
    .NET 生态系统的蜕变之 .NET 6
    Deislabs开源 使用WebAssembly打造的PaaS项目Hippo
    微软认真聆听了开源 .NET 开发社区的炮轰: 通过CLI 支持 Hot Reload 功能
    单体应用 适合采用 dapr 构建吗?
    微软发布了Visual Studio 2022 RC版,并将在11月8日发布正式版
    [LeetCode] 1248. Count Number of Nice Subarrays 统计优美子数组
  • 原文地址:https://www.cnblogs.com/bimingcong/p/10276450.html
Copyright © 2011-2022 走看看