android介面空資料,沒網路的背景互動
直接效果圖(這是模擬了一個沒有網路的時候得圖)
看下自定義的一個EmptyLayout:(來源於開源中國)因為沒什麼難度就直接貼程式碼了
package com.example.baselayoutapp; import android.content.Context; import android.net.ConnectivityManager; import android.net.NetworkInfo; import android.telephony.TelephonyManager; import android.util.AttributeSet; import android.view.View; import android.widget.ImageView; import android.widget.LinearLayout; import android.widget.ProgressBar; import android.widget.RelativeLayout; import android.widget.TextView; /** * * @author 開源中國 * */ public class EmptyLayout extends LinearLayout implements android.view.View.OnClickListener { //載入成功 不顯示emptylayout了 public static final int HIDE_LAYOUT = 4; //網路沒有連線 public static final int NETWORK_ERROR = 1; //正在載入資料 public static final int NETWORK_LOADING = 2; //沒有資料 public static final int NODATA = 3; public static final int NODATA_ENABLE_CLICK = 5; private ProgressBar animProgress; private boolean clickEnable = true; private final Context context; public ImageView img; private android.view.View.OnClickListener listener; private int mErrorState; private String strNoDataContent = ""; private TextView tv; public EmptyLayout(Context context) { super(context); this.context = context; init(); } public EmptyLayout(Context context, AttributeSet attrs) { super(context, attrs); this.context = context; init(); } private void init() { View view = View.inflate(context, R.layout.view_error_layout, null); img = (ImageView) view.findViewById(R.id.img_error_layout); tv = (TextView) view.findViewById(R.id.tv_error_layout); RelativeLayout mLayout = (RelativeLayout) view.findViewById(R.id.pageerrLayout); animProgress = (ProgressBar) view.findViewById(R.id.animProgress); setBackgroundColor(-1); setOnClickListener(this); img.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { if (clickEnable) { // setErrorType(NETWORK_LOADING); if (listener != null) listener.onClick(v); } } }); addView(view); changeErrorLayoutBgMode(context); } public void changeErrorLayoutBgMode(Context context1) { // mLayout.setBackgroundColor(SkinsUtil.getColor(context1, // "bgcolor01")); // tv.setTextColor(SkinsUtil.getColor(context1, "textcolor05")); } public void dismiss() { mErrorState = HIDE_LAYOUT; setVisibility(View.GONE); } public int getErrorState() { return mErrorState; } public boolean isLoadError() { return mErrorState == NETWORK_ERROR; } public boolean isLoading() { return mErrorState == NETWORK_LOADING; } @Override public void onClick(View v) { if (clickEnable) { // setErrorType(NETWORK_LOADING); if (listener != null) listener.onClick(v); } } @Override protected void onAttachedToWindow() { super.onAttachedToWindow(); onSkinChanged(); } @Override protected void onDetachedFromWindow() { super.onDetachedFromWindow(); } public void onSkinChanged() { } public void setErrorMessage(String msg) { tv.setText(msg); } /** * 新添設定背景 * @param imgResource 圖片的id * @param msg 圖片下面的textView顯示的文字 * */ public void setErrorImag(int imgResource,String msg) { try { img.setBackgroundResource(imgResource); tv.setText(msg); } catch (Exception e) { } } public void setErrorType(int i) { setVisibility(View.VISIBLE); switch (i) { case NETWORK_ERROR: mErrorState = NETWORK_ERROR; if (isConnectivity(context)) { tv.setText(R.string.error_view_load_error_click_to_refresh); img.setBackgroundResource(R.drawable.pagefailed_bg); } else { tv.setText(R.string.error_view_network_error_click_to_refresh); img.setBackgroundResource(R.drawable.page_icon_network); } img.setVisibility(View.VISIBLE); animProgress.setVisibility(View.GONE); clickEnable = true; break; case NETWORK_LOADING: mErrorState = NETWORK_LOADING; animProgress.setVisibility(View.VISIBLE); img.setVisibility(View.GONE); tv.setText(R.string.error_view_loading); clickEnable = false; break; case NODATA: mErrorState = NODATA; img.setBackgroundResource(R.drawable.page_icon_empty); img.setVisibility(View.VISIBLE); animProgress.setVisibility(View.GONE); setTvNoDataContent(); clickEnable = true; break; case HIDE_LAYOUT: setVisibility(View.GONE); break; case NODATA_ENABLE_CLICK: mErrorState = NODATA_ENABLE_CLICK; img.setBackgroundResource(R.drawable.page_icon_empty); img.setVisibility(View.VISIBLE); animProgress.setVisibility(View.GONE); setTvNoDataContent(); clickEnable = true; break; default: break; } } public void setNoDataContent(String noDataContent) { strNoDataContent = noDataContent; } public void setOnLayoutClickListener(View.OnClickListener listener) { this.listener = listener; } public void setTvNoDataContent() { if (!strNoDataContent.equals("")) tv.setText(strNoDataContent); else tv.setText(R.string.error_view_no_data); } @Override public void setVisibility(int visibility) { if (visibility == View.GONE) mErrorState = HIDE_LAYOUT; super.setVisibility(visibility); } /** * * 描述:是否有網路連線.androidbase中AbWifiUtil中的方法 * @param context * @return */ public static boolean isConnectivity(Context context) { ConnectivityManager connectivityManager = (ConnectivityManager) context .getSystemService(Context.CONNECTIVITY_SERVICE); TelephonyManager telephonyManager = (TelephonyManager) context .getSystemService(Context.TELEPHONY_SERVICE); return ((connectivityManager.getActiveNetworkInfo() != null && connectivityManager .getActiveNetworkInfo().getState() == NetworkInfo.State.CONNECTED) || telephonyManager .getNetworkType() == TelephonyManager.NETWORK_TYPE_UMTS); } }
然後就是activity中的使用了:
佈局檔案是private void initView() { mErrorLayout = (EmptyLayout) findViewById(R.id.empty_view); mListView = (ListView) findViewById(R.id.list); mErrorLayout.setOnLayoutClickListener(new View.OnClickListener() { @Override public void onClick(View v) { virtulHttp(); } }); } //模擬網路請求資料 private void virtulHttp(){ mErrorLayout.setErrorType(EmptyLayout.NETWORK_LOADING); new Thread(new Runnable() { @Override public void run() { try { Thread.sleep(1000); if(EmptyLayout.isConnectivity(MainActivity.this)){//有沒有網 data = new String[]{"啦","啦啦","啦啦啦"}; adapter = new ArrayAdapter<String>(MainActivity.this, android.R.layout.simple_expandable_list_item_1, android.R.id.text1,data ); }else{ data = new String[]{}; } mHandler.sendEmptyMessage(0); } catch (InterruptedException e) { e.printStackTrace(); } } }).start(); } Handler mHandler = new Handler(){ public void handleMessage(android.os.Message msg) { if(null!=adapter){ mListView.setAdapter(adapter); mErrorLayout.setErrorType(EmptyLayout.HIDE_LAYOUT); } else if (0==data.length){ if(EmptyLayout.isConnectivity(MainActivity.this)){//網路連線問題 mErrorLayout.setErrorType(EmptyLayout.NODATA); return; } mErrorLayout.setErrorType(EmptyLayout.NETWORK_ERROR); } }; };
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent" android:layout_height="match_parent" > <ListView android:id="@+id/list" android:layout_width="match_parent" android:layout_height="match_parent" /> <com.example.baselayoutapp.EmptyLayout android:id="@+id/empty_view" android:layout_width="match_parent" android:layout_height="match_parent" /> </RelativeLayout>
最後貼下demo下載地址:http://www.oschina.net/code/snippet_2702417_57579
相關推薦
android介面空資料,沒網路的背景互動
直接效果圖(這是模擬了一個沒有網路的時候得圖) 看下自定義的一個EmptyLayout:(來源於開源中國)因為沒什麼難度就直接貼程式碼了 package com.example.baselayoutapp; import android.content.Context;
資料庫有資料,但查詢不到資料,沒查到還爆空指標
今天在做springMVC專案的時候,因為粗心,忘了在控制層注入service的類上面加上@Autowired,執行程式碼就一直報空指標,把hql翻譯成sql放入資料庫查詢
報表統計——java實現查詢某年某月每天資料,沒資料補0
一般圖表繪製例如echarts等,返回資料格式都大同小異。重點是利用sql或者java實現資料格式的轉型,接下來是關鍵部分: 1.前提1:提供的工具方法——獲取某月有多少天 //通過年份和月份確定該月的最後一天 public static int getMaxDay(int year,in
Android Retrofit使用指南,讓網路請求更簡單。
Retrofit與okhttp都是Square公司的出品,Retrofit是對okhttp做了一層封裝,只要簡單的配置,就可以是用Retrofit。 github地址: Gradle依賴: c
解決dataTables再次呼叫不能清空資料,解決Cannot reinitialise DataTable問題
$('#example').DataTable({ searching:false, //去掉搜尋框 bLengthChange:false,//去掉每頁多少條框體 "language": { "info": "", // 表格左下角
關於如何取出非同步執行緒裡的資料,例如網路請求回來的物件陣列
最近搞自己手頭的專案時遇到了一個問題,就是使用okhttp向伺服器請求資料回來,在它的介面方法中獲取到了資料,但是賦值給一個全域性的list的時候發現這個list並沒有被賦值,為空,但是在okhttp的onResponse()中確實已經賦值成功了,但是到了外部發現沒有,仔細想想,okhttp的onR
android頁面滑動時,頂部title背景漸變的實現
在淘寶的商品詳情頁,我們會看到頂部的title背景顏色隨著scrollView的上下滑動而漸變,這樣的功能在我們應用中會經常用到,今天就來說一下我實現下這種功能方法,當然方法可能比較笨,看到部落格的大牛,希望能得到你們的指點。 先晒幾張效果圖:
android介面之美---自定義網路請求進度載入對話方塊
1.定義進度對話方塊類 <span style="font-size:18px;">public class ProgressDialog { public Dialog mDialo
java用post方法獲取json資料,與伺服器進行互動
下載好以後匯入依賴包,下面sendInfo方法就是互動方法,可以直接拿去用: public static String sendInfo(String sendurl, String data)
Native Socket.IO and Android ( socket請求,與伺服器的互動)
使用GitHub上開源框架實現socket1.在build檔案中引入:compile 'com.github.nkzawa:socket.io-client:0.3.0'-- 連結 : https://github.com/nkzawa/socket.io-android-
解決Android啟動顯示空白介面的問題,自定義進入軟體前的背景圖片
1.新建xml檔案 設定其背景圖片 android:background="@mipmap/initmap" <?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android=
Android訪問網路系列之--服務端返回XML或JSON格式資料,Android 進行解析並顯示
例子說明:使用者通過訪問web資源的最新電影資訊,伺服器端生成XML或JSON格式資料,返回Android客戶端進行顯示。 此案例開發需要兩個方面 WEB開發和android開發. 一.web開發相對比較簡單,只是模擬一下 相關程式碼如下: 1.實體Bean package ygc.yxb.domain
Android訪問網路:服務端返回XML或JSON格式資料,Android 進行解析並使用ListView顯示
剛剛入門學習了Android的ListView,也是看了傳智播客黎活明老師的視訊學習了,但是一直執行不了,還報錯了。報的錯誤是:at android.os.StrictMode$AndroidBlockGuardPolicy.onNetwork(StrictMode.jav
Android自定義切換佈局(請求中,無網路,無資料等)
在一般的專案中,像請求中、無資料、無網路、請求超時等這些狀態的佈局我們需要經常切換。 在之前的專案中,我是在每個需要顯示這些佈局的xml檔案中都include請求中,無資料,無網路等這些佈局,然後再Activity中控制他們的顯示與隱藏,雖然能實現效果,但是控
Android中檢查網路連線狀態的變化,無網路時跳轉到設定介面
在AndroidManifest.xml中加一個許可權 <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" /> <intent-filter>
在android studio 中判斷是否有網路,並且跳轉到設定網路介面的工具類
在使用app的情況下,我們需要判斷使用者是否有網路,並提示跳轉到設定網路的介面,可以封裝成一個工具類(判斷是否有網) public boolean isConn(Context context){ //1.得到網路管理類 ConnectivityManager manag
Android實現個人資料頁面頭像背景模糊顯示,包括狀態列
public class FastBlurUtils { public static Bitmap doBlur(Bitmap sentBitmap, int radius, boolean canReuseInBitmap) {
新機首次安裝 app,請求網路許可權“是否允許使用資料”,點允許後,首頁資料為空
現在發現一個問題,在iOS10以上中,當app在手機第一次安裝的時候,蘋果會預設彈出一個是否允許app使用資料的彈框,允許後首頁一片空白,之前做那個app沒在關注過這一次,因為首頁有下拉重新整理這個功能,並且這個問題是這個裝置第一次安裝才出現,也沒太關注過這個問
Blazui 常見問題:我更新了資料,為什麼介面沒重新整理?
首發於:http://www.blazor.group:8000/topic/reply?tpid=9 開門見山,不介紹,不廢話 建議食用本文前先食用 https://www.cnblogs.com/wzxinchen/p/12082136.html 正常情況下,Blazor 的介面是怎樣重新整理的? Bla
Jupyter notebook執行出錯,瀏覽器頁面為空資料夾
用conda裝了好多遍jupyter notebook都不好使,每次下到一大半網路出錯。 改用pip安裝後,還是出現一個問題。命令列顯示對比正常執行情況主要多了兩行問題: 1.forbidden403 2.'_xsrf' argument missing fro