網路載入輔助空頁面

来源:https://www.cnblogs.com/LiuZhen/archive/2017/12/29/8143411.html
-Advertisement-
Play Games

空頁面的顯示很常用,所以自己做了一個通用的空頁面顯示,先看效果圖 在有網路的時候正常載入顯示,在沒有網路的時候自動載入空頁面,點擊空頁面重新載入網路請求的一個功能 1:定義一個xml頁面,頁面佈局是一個iamgeview和一個textview的顯示 2:添加輔助類,控制載入空頁面和顯示隱藏等邏輯 3 ...


空頁面的顯示很常用,所以自己做了一個通用的空頁面顯示,先看效果圖

 

在有網路的時候正常載入顯示,在沒有網路的時候自動載入空頁面,點擊空頁面重新載入網路請求的一個功能

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方法是上篇文章里說的懶載入,頁面只會載入一次,而空頁面也是一樣,讓它只在初始化的時候創建一個對象

然後是退出時候調用

就是清除了我們的資源,釋放記憶體

接下來就是在網路請求錯誤的地方調用我們的方法就行了

網路錯誤空頁面將顯示,點擊空頁面重新調用載入方法,如果在次網路錯誤,則在次調用顯示我們的空頁面

這樣就把多餘的邏輯控制都封裝在輔助類裡面了,而實際上我們需要考慮手動調用的就只有一行代碼而已,其它的都不需要去考慮

歡迎反饋意見,歡迎收藏^_^

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


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • 在之前的iPhone中、我們可以根據導航欄上方的網路狀態view、來判斷網路狀態。(這種方案本來就不太好) 並且,這種方案在iPhone X 手機上、不可使用。 那麼,在iPhone X 或者之前的手機上面該怎麼辦呢? 我們可以通過 Reachability 來判斷網路狀態 Reachability ...
  • App 運行理論 main() 執行前發生的事 Mach-O 格式 虛擬記憶體基礎 Mach-O 二進位的載入 main() 執行前發生的事 Mach-O 格式 虛擬記憶體基礎 Mach-O 二進位的載入 理論速成 Mach-O 術語 Mach-O 是針對不同運行時可執行文件的文件類型。 文件類型: E ...
  • NDK 是什麼 NDK 全稱 Native Development Kit,可以讓您在 Android 應用中調用 C 或 C++ 代碼的工具。 NDK 好處 1、NDK 可以生成 .so 文件, 方便代碼共用; 2、增加反編譯的難度; 3、提高性能。 NDK 構建 版本說明 Android Stu ...
  • 1.密碼輸入框 attrs.xml PasswordEditText 目前的效果就是點擊之後會彈出系統的鍵盤,實現了基本的效果,接下來我們再加入監聽也就說當密碼輸入完成我們需要回調監聽。 2.自定義鍵盤: ui_customer_keyboard.xml: 1 <?xml version="1.0" ...
  • 本文使用helloworld來作為android的入門項目,通過這個最簡單的項目來幫助大家瞭解android程式開發包含哪些部分,以及如何運行android程式,本次開發android程式的工具是eclipse。 工具準備: eclipse sdk 逍遙安卓或者其它模擬器 APP創建步驟 1、打開已 ...
  • 在Android6.0以後,Google將許可權分為了兩類,一類為正常許可權(Normal Permission),一類為危險許可權(Dangerous Permission)。對於正常正常許可權,只需在Manifest文件裡面申請即可,但對於危險許可權,需要運行時動態申請。 危險許可權包括以下: 動態許可權申請 ...
  • 經過前面三期的破解,想必大家已經非常熟悉破解的流程,這一篇也算是練手項目,我們繼續來練習吧 apk下載地址:鏈接: https://pan.baidu.com/s/1sl3b3R3 密碼: 6666 破解步驟: 1.試玩,找到關鍵字 如下圖,可以看到彈出了Toast對話框,支付失敗!這幾字就是我們要 ...
  • 前言:本文主要講述使用hook方式實現紅包插件,涉及到tweak相關知識,如果你不想瞭解具體實現細節可直接到我的 "Github" 地址參考安裝(包含越獄和非越獄兩種方法)   轉眼間2017即將過去,又到了領紅包拿到手軟的時候。年會上少不了幾百上千的紅包,真是稍不留神就錯過幾 ...
一周排行
    -Advertisement-
    Play Games
  • 前言 本文介紹一款使用 C# 與 WPF 開發的音頻播放器,其界面簡潔大方,操作體驗流暢。該播放器支持多種音頻格式(如 MP4、WMA、OGG、FLAC 等),並具備標記、實時歌詞顯示等功能。 另外,還支持換膚及多語言(中英文)切換。核心音頻處理採用 FFmpeg 組件,獲得了廣泛認可,目前 Git ...
  • OAuth2.0授權驗證-gitee授權碼模式 本文主要介紹如何筆者自己是如何使用gitee提供的OAuth2.0協議完成授權驗證並登錄到自己的系統,完整模式如圖 1、創建應用 打開gitee個人中心->第三方應用->創建應用 創建應用後在我的應用界面,查看已創建應用的Client ID和Clien ...
  • 解決了這個問題:《winForm下,fastReport.net 從.net framework 升級到.net5遇到的錯誤“Operation is not supported on this platform.”》 本文內容轉載自:https://www.fcnsoft.com/Home/Sho ...
  • 國內文章 WPF 從裸 Win 32 的 WM_Pointer 消息獲取觸摸點繪製筆跡 https://www.cnblogs.com/lindexi/p/18390983 本文將告訴大家如何在 WPF 裡面,接收裸 Win 32 的 WM_Pointer 消息,從消息裡面獲取觸摸點信息,使用觸摸點 ...
  • 前言 給大家推薦一個專為新零售快消行業打造了一套高效的進銷存管理系統。 系統不僅具備強大的庫存管理功能,還集成了高性能的輕量級 POS 解決方案,確保頁面載入速度極快,提供良好的用戶體驗。 項目介紹 Dorisoy.POS 是一款基於 .NET 7 和 Angular 4 開發的新零售快消進銷存管理 ...
  • ABP CLI常用的代碼分享 一、確保環境配置正確 安裝.NET CLI: ABP CLI是基於.NET Core或.NET 5/6/7等更高版本構建的,因此首先需要在你的開發環境中安裝.NET CLI。這可以通過訪問Microsoft官網下載並安裝相應版本的.NET SDK來實現。 安裝ABP ...
  • 問題 問題是這樣的:第三方的webapi,需要先調用登陸介面獲取Cookie,訪問其它介面時攜帶Cookie信息。 但使用HttpClient類調用登陸介面,返回的Headers中沒有找到Cookie信息。 分析 首先,使用Postman測試該登陸介面,正常返回Cookie信息,說明是HttpCli ...
  • 國內文章 關於.NET在中國為什麼工資低的分析 https://www.cnblogs.com/thinkingmore/p/18406244 .NET在中國開發者的薪資偏低,主要因市場需求、技術棧選擇和企業文化等因素所致。歷史上,.NET曾因微軟的閉源策略發展受限,儘管後來推出了跨平臺的.NET ...
  • 在WPF開發應用中,動畫不僅可以引起用戶的註意與興趣,而且還使軟體更加便於使用。前面幾篇文章講解了畫筆(Brush),形狀(Shape),幾何圖形(Geometry),變換(Transform)等相關內容,今天繼續講解動畫相關內容和知識點,僅供學習分享使用,如有不足之處,還請指正。 ...
  • 什麼是委托? 委托可以說是把一個方法代入另一個方法執行,相當於指向函數的指針;事件就相當於保存委托的數組; 1.實例化委托的方式: 方式1:通過new創建實例: public delegate void ShowDelegate(); 或者 public delegate string ShowDe ...