热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

请教一个关于Fragment结合ViewPager懒加载,加载过渡动画统一的问题,我这样写有什么问题或者可以进一步优化吗?

比如在LazyFragment里面mProgressBar.setVisibility(View.GONE);这个加载进度放在这里设置隐藏是否合适?总觉得进度圈消失得太快了.有更优的解决方法吗?

比如在LazyFragment里面mProgressBar.setVisibility(View.GONE);这个加载进度放在这里设置隐藏是否合适?总觉得进度圈消失得太快了.有更优的解决方法吗?下面是效果和LazyFragment,BaseFragment代码和BaseFragment的布局:
1.效果(加载中后加载成功后):
图片描述

图片描述

2.BaseFragment布局:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89



    xmlns:app="http://schemas.android.com/apk/res-auto"

    android:layout_

    android:layout_>



   
        android:orientation="vertical"

        android:layout_

        android:layout_>



       
            android:id="@+id/toolbar"

            android:background="#33ff0000"

            android:layout_

            android:layout_>



           
                android:id="@+id/iv_back"

                android:layout_

                android:layout_

                android:paddingTop="20dp"

                android:paddingBottom="20dp"

                android:paddingRight="20dp"

                android:paddingLeft="10dp" />



           
                android:id="@+id/tv_back"

                android:layout_

                android:layout_

                android:layout_centerVertical="true"

                android:layout_toRightOf="@id/iv_back"

                android:textSize="15sp" />



           
                android:id="@+id/tv_title"

                android:layout_

                android:layout_

                android:layout_gravity="center"

                android:textColor="#FF333333"

                android:text="基类"

                android:textSize="20sp" />



           
                android:id="@+id/iv_title"

                android:layout_

                android:layout_ />



           
                android:id="@+id/tv_more"

                android:layout_

                android:layout_

                android:layout_gravity="end"

                android:padding="16dp"

                android:textSize="15sp" />



           
                android:id="@+id/iv_more"

                android:layout_

                android:layout_

                android:layout_gravity="end"

                android:padding="16dp" />



       



       



   



   
        android:id="@+id/rl_progress"

        android:background="#ffffff"

        android:visibility="gone"

        android:layout_

        android:layout_>



       
            android:layout_centerInParent="true"

            android:layout_

            android:layout_ />



   





3.BaseFragment代码:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
public abstract class BaseFragment extends Fragment {



    private View rootView;

    protected FrameLayout frameLayout;

    protected TextView mTvTitle;

    protected TextView mTvMore;

    protected ImageView mIvBack;

    protected ImageView mIvTitle;

    protected ImageView mIvMore;

    protected Toolbar mToolbar;

    protected RelativeLayout mProgressBar;

    private Unbinder unbinder;

    private static final String TAG = "BaseFragment";



    @Nullable

    @Override

    public View onCreateView(LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {

        if (rootView != null) return rootView;  //初始化布局后就不再重复加载

        rootView = inflater.inflate(R.layout.fragment_base, container, false);

        mProgressBar=rootView.findViewById(R.id.rl_progress);

        mProgressBar.setVisibility(View.VISIBLE);

        frameLayout = rootView.findViewById(R.id.content_container);

        mToolbar = rootView.findViewById(R.id.toolbar);

        mTvTitle = rootView.findViewById(R.id.tv_title);

        mTvMore = rootView.findViewById(R.id.tv_more);

        mIvBack = rootView.findViewById(R.id.iv_back);

        mIvTitle = rootView.findViewById(R.id.iv_title);

        mIvMore = rootView.findViewById(R.id.iv_more);

        View view = View.inflate(getActivity(), getLayout(), null);

        frameLayout.addView(view);

        unbinder = ButterKnife.bind(this, view);

        initView(savedInstanceState);

        return rootView;

    }



    /**

     * 绑定布局文件

     */

    protected abstract int getLayout();



    /**

     * 初始化布局,但是不加载数据

     */

    protected abstract void initView(Bundle savedInstanceState);



    @Override

    public void onDestroy() {

        super.onDestroy();

        if (unbinder != null) {

            unbinder.unbind();

        }

    }

}

4.懒加载fragment代码:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
public abstract class LazyFragment extends BaseFragment {



    protected boolean isViewInitiated;  //是否初始化过布局

    protected boolean isVisibleToUser;  //当前界面是否可见

    protected boolean isDataInitiated;  //是否加载过数据

    private static final String TAG = "LazyFragment";



    @Override

    public void onActivityCreated(@Nullable Bundle savedInstanceState) {

        super.onActivityCreated(savedInstanceState);

        isViewInitiated=true;

        prepareFetchData();

    }



    @Override

    public void setUserVisibleHint(boolean isVisibleToUser) {

        super.setUserVisibleHint(isVisibleToUser);

        this.isVisibleToUser = isVisibleToUser;

        if (isVisibleToUser) {

            prepareFetchData();

        }

    }



    /**

     * 懒加载

     */

    public abstract void fetchData();



    public void prepareFetchData() {

        prepareFetchData(false);

    }



    /**

     * 判断懒加载条件,在这里访问服务器获取然后设置数据

     */

    public void prepareFetchData(boolean forceUpdate) {

        if (isVisibleToUser && isViewInitiated && (!isDataInitiated || forceUpdate)) {

            mProgressBar.setVisibility(View.GONE); //隐藏加载进度

            fetchData();

            isDataInitiated = true;

        }

    }



    @Override

    public void onDetach() {

        super.onDetach();

        isDataInitiated = false;

    }

}

5.具体使用类:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
public class FragmentA extends LazyFragment {



    @BindView(R.id.tv_a)

    TextView mTextView;



    @Override

    protected void initView( Bundle savedInstanceState) {

        mTextView.setText("11111111111111111");

    }



    @Override

    protected int getLayout() {

        return R.layout.fragment_a;

    }



    @Override

    public void fetchData() {



    }

}



推荐阅读
  • Android系统移植与调试之如何修改Android设备状态条上音量加减键在横竖屏切换的时候的显示于隐藏
    本文介绍了如何修改Android设备状态条上音量加减键在横竖屏切换时的显示与隐藏。通过修改系统文件system_bar.xml实现了该功能,并分享了解决思路和经验。 ... [详细]
  • 在Xamarin XAML语言中如何在页面级别构建ControlTemplate控件模板
    本文介绍了在Xamarin XAML语言中如何在页面级别构建ControlTemplate控件模板的方法和步骤,包括将ResourceDictionary添加到页面中以及在ResourceDictionary中实现模板的构建。通过本文的阅读,读者可以了解到在Xamarin XAML语言中构建控件模板的具体操作步骤和语法形式。 ... [详细]
  • iOS超签签名服务器搭建及其优劣势
    本文介绍了搭建iOS超签签名服务器的原因和优势,包括不掉签、用户可以直接安装不需要信任、体验好等。同时也提到了超签的劣势,即一个证书只能安装100个,成本较高。文章还详细介绍了超签的实现原理,包括用户请求服务器安装mobileconfig文件、服务器调用苹果接口添加udid等步骤。最后,还提到了生成mobileconfig文件和导出AppleWorldwideDeveloperRelationsCertificationAuthority证书的方法。 ... [详细]
  • 基于Socket的多个客户端之间的聊天功能实现方法
    本文介绍了基于Socket的多个客户端之间实现聊天功能的方法,包括服务器端的实现和客户端的实现。服务器端通过每个用户的输出流向特定用户发送消息,而客户端通过输入流接收消息。同时,还介绍了相关的实体类和Socket的基本概念。 ... [详细]
  • 本文介绍了使用kotlin实现动画效果的方法,包括上下移动、放大缩小、旋转等功能。通过代码示例演示了如何使用ObjectAnimator和AnimatorSet来实现动画效果,并提供了实现抖动效果的代码。同时还介绍了如何使用translationY和translationX来实现上下和左右移动的效果。最后还提供了一个anim_small.xml文件的代码示例,可以用来实现放大缩小的效果。 ... [详细]
  • XML介绍与使用的概述及标签规则
    本文介绍了XML的基本概念和用途,包括XML的可扩展性和标签的自定义特性。同时还详细解释了XML标签的规则,包括标签的尖括号和合法标识符的组成,标签必须成对出现的原则以及特殊标签的使用方法。通过本文的阅读,读者可以对XML的基本知识有一个全面的了解。 ... [详细]
  • 本文介绍了一个在线急等问题解决方法,即如何统计数据库中某个字段下的所有数据,并将结果显示在文本框里。作者提到了自己是一个菜鸟,希望能够得到帮助。作者使用的是ACCESS数据库,并且给出了一个例子,希望得到的结果是560。作者还提到自己已经尝试了使用"select sum(字段2) from 表名"的语句,得到的结果是650,但不知道如何得到560。希望能够得到解决方案。 ... [详细]
  • 本文介绍了南邮ctf-web的writeup,包括签到题和md5 collision。在CTF比赛和渗透测试中,可以通过查看源代码、代码注释、页面隐藏元素、超链接和HTTP响应头部来寻找flag或提示信息。利用PHP弱类型,可以发现md5('QNKCDZO')='0e830400451993494058024219903391'和md5('240610708')='0e462097431906509019562988736854'。 ... [详细]
  • Java学习笔记之面向对象编程(OOP)
    本文介绍了Java学习笔记中的面向对象编程(OOP)内容,包括OOP的三大特性(封装、继承、多态)和五大原则(单一职责原则、开放封闭原则、里式替换原则、依赖倒置原则)。通过学习OOP,可以提高代码复用性、拓展性和安全性。 ... [详细]
  • MyBatis多表查询与动态SQL使用
    本文介绍了MyBatis多表查询与动态SQL的使用方法,包括一对一查询和一对多查询。同时还介绍了动态SQL的使用,包括if标签、trim标签、where标签、set标签和foreach标签的用法。文章还提供了相关的配置信息和示例代码。 ... [详细]
  • Whatsthedifferencebetweento_aandto_ary?to_a和to_ary有什么区别? ... [详细]
  • 本文介绍了一个Magento模块,其主要功能是实现前台用户利用表单给管理员发送邮件。通过阅读该模块的代码,可以了解到一些有关Magento的细节,例如如何获取系统标签id、如何使用Magento默认的提示信息以及如何使用smtp服务等。文章还提到了安装SMTP Pro插件的方法,并给出了前台页面的代码示例。 ... [详细]
  • loader资源模块加载器webpack资源模块加载webpack内部(内部loader)默认只会处理javascript文件,也就是说它会把打包过程中所有遇到的 ... [详细]
  • t-io 2.0.0发布-法网天眼第一版的回顾和更新说明
    本文回顾了t-io 1.x版本的工程结构和性能数据,并介绍了t-io在码云上的成绩和用户反馈。同时,还提到了@openSeLi同学发布的t-io 30W长连接并发压力测试报告。最后,详细介绍了t-io 2.0.0版本的更新内容,包括更简洁的使用方式和内置的httpsession功能。 ... [详细]
  • Java图形化计算器设计与实现
    本文介绍了使用Java编程语言设计和实现图形化计算器的方法。通过使用swing包和awt包中的组件,作者创建了一个具有按钮监听器和自定义界面尺寸和布局的计算器。文章还分享了在图形化界面设计中的一些心得体会。 ... [详细]
author-avatar
承志68694849
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有