Java自学者论坛

 找回密码
 立即注册

手机号码,快捷登录

恭喜Java自学者论坛(https://www.javazxz.com)已经为数万Java学习者服务超过8年了!积累会员资料超过10000G+
成为本站VIP会员,下载本站10000G+会员资源,会员资料板块,购买链接:点击进入购买VIP会员

JAVA高级面试进阶训练营视频教程

Java架构师系统进阶VIP课程

分布式高可用全栈开发微服务教程Go语言视频零基础入门到精通Java架构师3期(课件+源码)
Java开发全终端实战租房项目视频教程SpringBoot2.X入门到高级使用教程大数据培训第六期全套视频教程深度学习(CNN RNN GAN)算法原理Java亿级流量电商系统视频教程
互联网架构师视频教程年薪50万Spark2.0从入门到精通年薪50万!人工智能学习路线教程年薪50万大数据入门到精通学习路线年薪50万机器学习入门到精通教程
仿小米商城类app和小程序视频教程深度学习数据分析基础到实战最新黑马javaEE2.1就业课程从 0到JVM实战高手教程MySQL入门到精通教程
查看: 368|回复: 0

解决Fragment每次进入都加载的问题

[复制链接]
  • TA的每日心情
    奋斗
    4 天前
  • 签到天数: 789 天

    [LV.10]以坛为家III

    2049

    主题

    2107

    帖子

    72万

    积分

    管理员

    Rank: 9Rank: 9Rank: 9

    积分
    722638
    发表于 2021-6-19 21:18:32 | 显示全部楼层 |阅读模式
    1、首先了解一下fragment的生命周期
    onCreate是指创建该fragment类似于Activity.onCreate,你可以在其中初始化除了view之外的东西,onCreateView是创建该fragment对应的视图,你必须在这里创建自己的视图并返回给调用者,例如
    return inflater.inflate(R.layout.fragment_settings, container, false);。
    super.onCreateView有没有调用都无所谓,因为super.onCreateView是直接返回null的
        由上可见fragment的view在从其他fragment切回来后都会被重新创建视图onCreateView,所以当我们在fragment含有比较复杂且加载数据量较耗时的时候便会在初始化view的时候变得很卡。
      所以我便将复杂的view单独拎出来放在oncreate内,只在父activity创建后初始化一次,然后将这个复杂的view再添加到fragment中。
    下面是我的代码:
      private View vv;
        @Override
        public void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            goodAdapter = new AdapterCursorGoodList(getActivity());
            getActivity().getSupportLoaderManager().initLoader(-1, null, praiseLoaderCallbacks);
            vv = LayoutInflater.from(getActivity()).inflate(R.layout.infos_content_item, null);
            goodLayout = (InfosListLayout) vv.findViewById(R.id.good_layout);// 解决了每次fragment onCreateView,此处只被new一次
        }
     
      private LinearLayout ll_container;// 这个容器是装goodLayout
        @Override
        public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
            View v = inflater.inflate(R.layout.infos_content, container, false);
                scrollView = (ScrollView) v.findViewById(R.id.newsScrollview);
            newsLoadMore = (TextView) v.findViewById(R.id.newsLoadMore);
            ll_container = (LinearLayout) v.findViewById(R.id.ll_container);
            ll_container.addView(vv);
    。。。。。。。。
    这个解决方案还不够好,因为第一次加载还是会卡,希望大家有更好的解决办法,欢迎指导
    哎...今天够累的,签到来了1...
    回复

    使用道具 举报

    您需要登录后才可以回帖 登录 | 立即注册

    本版积分规则

    QQ|手机版|小黑屋|Java自学者论坛 ( 声明:本站文章及资料整理自互联网,用于Java自学者交流学习使用,对资料版权不负任何法律责任,若有侵权请及时联系客服屏蔽删除 )

    GMT+8, 2024-9-10 10:56 , Processed in 0.058506 second(s), 29 queries .

    Powered by Discuz! X3.4

    Copyright © 2001-2021, Tencent Cloud.

    快速回复 返回顶部 返回列表