android界面空数据,没网络的背景交互
来源:互联网 发布:淘宝一元门事件 编辑:程序博客网 时间:2024/05/31 19:50
直接效果图(这是模拟了一个没有网络的时候得图)
看下自定义的一个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() {@Overridepublic 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;}@Overridepublic void onClick(View v) {if (clickEnable) {// setErrorType(NETWORK_LOADING);if (listener != null)listener.onClick(v);}}@Overrideprotected void onAttachedToWindow() {super.onAttachedToWindow();onSkinChanged();}@Overrideprotected 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);elsetv.setText(R.string.error_view_no_data);}@Overridepublic 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() {@Overridepublic 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
0 0
- android界面空数据,没网络的背景交互
- 数据界面的交互设计
- Android 自定义空数据提示界面 EmptyView
- 连接数据的网络交互
- 自定义View 01 --网络请求返回数据为空时的提示界面
- Android 网络数据交互之JSON
- Android多线程与界面交互的方法
- android多线程界面交互
- 最近做Qt的一个界面需要按钮在没悬浮时背景是透明
- Android(五)数据存储之五网络数据交互
- Android数据存储方式之:网络数据交互
- 网络交互,获取数据
- 事件通知实现界面间的数据交互
- SSM + Android 网络交互的那些事
- android 数据库放到了sd卡中 ,设置,清除数据时没办法清空数据库.
- 【Android游戏开发之五】游戏注册界面Demo-实现两个Activity之间的切换与数据交互!
- 【Android游戏开发之五】游戏注册界面Demo-实现两个Activity之间的切换与数据交互!
- 在Android中实现Service动态更新UI界面(Service与主程序Activity之间的数据交互或控制)
- maven 使用 checkstyle findbugs pmd 代码覆盖率检测等插件的使用
- tar命令错误
- Ubuntu安装JDK
- java反射之getGenericSuperclass方法的用处
- Windbg教程-调试非托管程序的基本命令上
- android界面空数据,没网络的背景交互
- Go语言学习笔记一——环境搭建
- Activity的生命周期
- java.io.IOException: Server returned HTTP response code: 405 for URL: *********处理方法
- Redis基本知识(二)
- 【Leetcode】Count Numbers with Unique Digits
- 第三方登录
- hql中关于一对多,根据数组里面某个对象的某个属性查询的方法总结。
- eclipst java heap space