• 网络加载空页面


    空页面的显示很常用,所以自己做了一个通用的空页面显示,先看效果图

    在有网络的时候正常加载显示,在没有网络的时候自动加载空页面,点击空页面重新加载网络请求的一个功能

    1:定义一个xml页面,页面布局是一个iamgeview和一个textview的显示

    2:添加辅助类,控制加载空页面和显示隐藏等逻辑

    3:在网络回调的时候调用方法显示以及在退出的时候清空缓存

    下面是代码

    <?xml version="1.0" encoding="utf-8"?>
    
    <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
        android:id="@+id/root"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:gravity="center"
        android:orientation="vertical">
    
        <ImageView
            android:id="@+id/img_icon"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_gravity="center_horizontal"
            android:src="@mipmap/empty" />
    
        <TextView
            android:id="@+id/tv_val"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_gravity="center_horizontal"
            android:layout_marginTop="@dimen/d51.0"
            android:text="网络开小差了,点击屏幕重试"
            android:textSize="@dimen/d43.0" />
    </LinearLayout>
    View Code
    package com.fragmentapp.helper;
    
    import android.content.Context;
    import android.view.Gravity;
    import android.view.LayoutInflater;
    import android.view.View;
    import android.view.ViewGroup;
    import android.widget.FrameLayout;
    import android.widget.ImageView;
    import android.widget.LinearLayout;
    import android.widget.TextView;
    
    import com.fragmentapp.R;
    
    /**
     * Created by liuzhen on 2017/12/28.
     */
    
    public class EmptyLayout {
    
        private Context context;
        private FrameLayout root;
    
        private TextView tv_val;
        private CallBack callBack;
    
        public EmptyLayout(Context context){
            this.context = context;
    
            LinearLayout.LayoutParams params = new LinearLayout.LayoutParams(ViewGroup.LayoutParams.MATCH_PARENT, ViewGroup.LayoutParams.MATCH_PARENT);
            params.gravity = Gravity.CENTER;
    
            root = new FrameLayout(context);
            root.setLayoutParams(params);
    
            View view = LayoutInflater.from(context).inflate(R.layout.layout_error,null);
            tv_val = view.findViewById(R.id.tv_val);
            root.addView(view);
        }
    
        public void showEmpty(final ViewGroup group, String val){
            tv_val.setText(val);
    
            group.removeView(root);
            group.addView(root,root.getLayoutParams());
    
            status(group,true);
    
            root.setOnClickListener(new View.OnClickListener() {
                @Override
                public void onClick(View view) {
                    if (callBack != null)
                        callBack.click();
                    status(group,false);
                }
            });
        }
    
        private void status(ViewGroup group,boolean isShow){
            if (isShow){
                for (int i = 0;i < group.getChildCount();i++) {
                    View view = group.getChildAt(i);
                    view.setVisibility(View.GONE);
                }
                root.setVisibility(View.VISIBLE);//放在后面才能生效
            }else{
                for (int i = 0;i < group.getChildCount();i++) {
                    View view = group.getChildAt(i);
                    view.setVisibility(View.VISIBLE);
                }
                root.setVisibility(View.GONE);
            }
    
        }
    
        public void setCallBack(CallBack callBack){
            if (this.callBack == null)
                this.callBack = callBack;
        }
    
        public void clear(){
            context = null;
            root.removeAllViews();
            root = null;
            callBack = null;
        }
    
        public interface CallBack{
            void click();
        }
    
    }
    View Code

    这里有几个注意的地方特别讲解一下,就是空页面的初始化和退出时候的一个调用

    空页面的初始化和退出因为是必须的一个操作,所以放在了base里面去控制

    visible方法是上篇文章里说的懒加载,页面只会加载一次,而空页面也是一样,让它只在初始化的时候创建一个对象

    然后是退出时候调用

    就是清除了我们的资源,释放内存

    接下来就是在网络请求错误的地方调用我们的方法就行了

    网络错误空页面将显示,点击空页面重新调用加载方法,如果在次网络错误,则在次调用显示我们的空页面

    这样就把多余的逻辑控制都封装在辅助类里面了,而实际上我们需要考虑手动调用的就只有一行代码而已,其它的都不需要去考虑

    上面两种效果都一样,直接指定一个root容器,或者直接getView获取root,直接获取就不用自己去单独设置id了

    欢迎反馈意见,欢迎收藏^_^

     GitHub:https://github.com/1024477951/FragmentApp

  • 相关阅读:
    C语言内存分析
    算法之快速排序
    单链表逆转
    C程序设计语言之一
    vim插件配置(一)
    makefile示例
    cocos2d基础入门
    Makefile
    Makefile
    GCC编译四阶段
  • 原文地址:https://www.cnblogs.com/LiuZhen/p/8143411.html
Copyright © 2020-2023  润新知