热门标签 | 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() {



    }

}



推荐阅读
  • RecyclerView初步学习(一)
    RecyclerView初步学习(一)ReCyclerView提供了一种插件式的编程模式,除了提供ViewHolder缓存模式,还可以自定义动画,分割符,布局样式,相比于传统的ListVi ... [详细]
  • 本文介绍如何使用布局文件在Android应用中排列多行TextView和Button,使其占据屏幕的特定比例,并提供示例代码以帮助理解和实现。 ... [详细]
  • 本文介绍如何使用 Android 的 Canvas 和 View 组件创建一个简单的绘图板应用程序,支持触摸绘画和保存图片功能。 ... [详细]
  • Android 九宫格布局详解及实现:人人网应用示例
    本文深入探讨了人人网Android应用中独特的九宫格布局设计,解析其背后的GridView实现原理,并提供详细的代码示例。这种布局方式不仅美观大方,而且在现代Android应用中较为少见,值得开发者借鉴。 ... [详细]
  • 本文详细介绍了Java中org.eclipse.ui.forms.widgets.ExpandableComposite类的addExpansionListener()方法,并提供了多个实际代码示例,帮助开发者更好地理解和使用该方法。这些示例来源于多个知名开源项目,具有很高的参考价值。 ... [详细]
  • Android LED 数字字体的应用与实现
    本文介绍了一种适用于 Android 应用的 LED 数字字体(digital font),并详细描述了其在 UI 设计中的应用场景及其实现方法。这种字体常用于视频、广告倒计时等场景,能够增强视觉效果。 ... [详细]
  • 本文探讨了在Java中实现系统托盘最小化的两种方法:使用SWT库和JDK6自带的功能。通过这两种方式,开发者可以创建跨平台的应用程序,使窗口能够最小化到系统托盘,并提供丰富的交互功能。 ... [详细]
  • 本文介绍了Android开发中Intent的基本概念及其在不同Activity之间的数据传递方式,详细展示了如何通过Intent实现Activity间的跳转和数据传输。 ... [详细]
  • 本文介绍了如何通过设置背景形状来轻松地为 Android 的 TextView 添加圆形边框。我们将详细讲解 XML 代码的配置,包括圆角、描边和填充等属性。 ... [详细]
  • 在 Android 开发中,通过 Intent 启动 Activity 或 Service 时,可以使用 putExtra 方法传递数据。接收方可以通过 getIntent().getExtras() 获取这些数据。本文将介绍如何使用 RoboGuice 框架简化这一过程,特别是 @InjectExtra 注解的使用。 ... [详细]
  • 深入解析Spring启动过程
    本文详细介绍了Spring框架的启动流程,帮助开发者理解其内部机制。通过具体示例和代码片段,解释了Bean定义、工厂类、读取器以及条件评估等关键概念,使读者能够更全面地掌握Spring的初始化过程。 ... [详细]
  • 主要用了2个类来实现的,话不多说,直接看运行结果,然后在奉上源代码1.Index.javaimportjava.awt.Color;im ... [详细]
  • 使用 Azure Service Principal 和 Microsoft Graph API 获取 AAD 用户列表
    本文介绍了一段通用代码示例,该代码不仅能够操作 Azure Active Directory (AAD),还可以通过 Azure Service Principal 的授权访问和管理 Azure 订阅资源。Azure 的架构可以分为两个层级:AAD 和 Subscription。 ... [详细]
  • DNN Community 和 Professional 版本的主要差异
    本文详细解析了 DotNetNuke (DNN) 的两种主要版本:Community 和 Professional。通过对比两者的功能和附加组件,帮助用户选择最适合其需求的版本。 ... [详细]
  • 本题探讨如何通过最大流算法解决农场排水系统的设计问题。题目要求计算从水源点到汇合点的最大水流速率,使用经典的EK(Edmonds-Karp)和Dinic算法进行求解。 ... [详细]
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社区 版权所有