//下面这个类是简单地封装用于无数据及加载错误的一个页面。public class CommonShowView { private Context mContext;// 上下文 private ViewGroup mEmptyOrErrorView;// 页面加载无数据或加载错误时显示 private ViewGroup mContentView;// 加载成功时显示的内容 private ViewGroup mParentView;// 父布局viewGroup private LayoutInflater mInflater; private TextView no_net; private Button load_btn; private boolean mViewsAdded; private ViewGroup.LayoutParams mLayoutParams = new ViewGroup.LayoutParams(LayoutParams.MATCH_PARENT, LayoutParams.MATCH_PARENT); public final static int TYPE_EMPTY = 1;// 数据为空 public final static int TYPE_ERROR = 2;// 加载数据失败 public final static int TYPE_CONTENT = 3;// 直接显示内容 private int mType = TYPE_EMPTY;// 数据类型,默认是无数据 /*** 构造方法,传入上下文及内容GroupView*/ public CommonShowView(Context context, ViewGroup mContentView) {mContext = context;mInflater = LayoutInflater.from(mContext);this.mContentView = mContentView;mParentView = (ViewGroup) mContentView.getParent();initViews(); } @SuppressLint("InflateParams") private void initViews() {mEmptyOrErrorView = (ViewGroup) mInflater.inflate(R.layout.common_show, null);no_net = (TextView) mEmptyOrErrorView.findViewById(R.id.no_net);load_btn = (Button) mEmptyOrErrorView.findViewById(R.id.load_btn);if (!mViewsAdded) { mViewsAdded = true; mParentView.addView(mEmptyOrErrorView, mLayoutParams);}load_btn.setOnClickListener(new OnClickListener() {// 检查网络,进行网络设置 @Override public void onClick(View v) {Intent intent = null;// 判断手机系统的版本 即API大于10 就是3.0或以上版本及魅族手机if (android.os.Build.VERSION.SDK_INT > 10 && !android.os.Build.MANUFACTURER.equals("Meizu")) { intent = new Intent(android.provider.Settings.ACTION_WIRELESS_SETTINGS);}else if (android.os.Build.VERSION.SDK_INT > 17 && android.os.Build.MANUFACTURER.equals("Meizu")) { intent = new Intent(android.provider.Settings.ACTION_SETTINGS);}else { intent = new Intent(); ComponentName component = new ComponentName("com.android.settings", "com.android.settings.WirelessSettings"); intent.setComponent(component); intent.setAction("android.intent.action.VIEW");}mContext.startActivity(intent); }}); } public ViewGroup getEmptyOrErrorView() {return mEmptyOrErrorView; } /*** 设置无数据或加载错误view* @description:*/ public void setEmptyOrErrorView(ViewGroup emptyOrErrorView) {this.mParentView.removeView(this.mEmptyOrErrorView);this.mParentView.addView(emptyOrErrorView, mLayoutParams);this.mEmptyOrErrorView = emptyOrErrorView; } /*** 设置无数据或加载错误view* @description:*/ public void setEmptyOrErrorView(int res) {ViewGroup vg = (ViewGroup) mInflater.inflate(res, null);this.mParentView.removeView(this.mEmptyOrErrorView);this.mParentView.addView(vg, mLayoutParams);this.mEmptyOrErrorView = vg; } /*** 获取内容view* @description:*/ public ViewGroup getContextView() {return mContentView; } /*** 方法概述:获取内容View的父布局*/ public ViewGroup getRootView() {return mParentView; } /*** 方法概述:设置展示内容的视图*/ public void setContextView(ViewGroup contentView) {this.mType = TYPE_CONTENT;showByType(mType); } /*** 根据类型进行对应展示 * @description:* @date 2016-2-19 下午3:02:20*/ public void showByType(int mType) {hideAllViews();if (mContentView != null) { switch (mType) {case TYPE_EMPTY: if (mEmptyOrErrorView != null) {mEmptyOrErrorView.setVisibility(View.VISIBLE);no_net.setText("这里空空也野哦~");load_btn.setVisibility(View.GONE); } break;case TYPE_ERROR: if (mEmptyOrErrorView != null) {mEmptyOrErrorView.setVisibility(View.VISIBLE);no_net.setText("网络加载失败哦~");load_btn.setVisibility(View.VISIBLE); } break;case TYPE_CONTENT: if (mContentView != null) {mContentView.setVisibility(View.VISIBLE); } break;default: break; }} } /*** 方法概述:将所有的子View隐藏起来*/ private void hideAllViews() {if (mParentView != null) { if (mParentView.getChildCount() > 0) {for (int i = 0; i < mParentView.getChildCount(); i++) { View childView = mParentView.getChildAt(i); if (childView != null) {childView.setVisibility(View.GONE); }} }} }}//错误页面及空页面时布局<?xml version="1.0" encoding="utf-8"?><RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" android:id="@+id/rel_null" android:layout_width="match_parent" android:layout_height="match_parent" > <TextViewandroid:id="@+id/no_net"android:layout_width="match_parent"android:layout_height="wrap_content"android:layout_centerHorizontal="true"android:layout_centerInParent="true"android:gravity="center"android:text="好像没网哦~"android:textColor="#333333"android:textSize="16sp" /> <Buttonandroid:id="@+id/load_btn"android:layout_width="112dp"android:layout_height="40dp"android:layout_below="@+id/no_net"android:layout_centerHorizontal="true"android:layout_marginTop="15dp"android:background="#E12228"android:gravity="center"android:text="检查网络"android:textColor="#ffffff"android:textSize="14sp" /></RelativeLayout>
//在Activity中使用public class MainActivity extends Activity { private ListView listview; private CommonShowView mShowView; private List<String> datas; @Override protected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_main);listview = (ListView) findViewById(R.id.listview);mShowView = new CommonShowView(this, listview);// ----------有数据的时情况下--------------// datas = getDatas(true);// listview.setAdapter(new MyAdapter(this, datas));// mShowView.setContextView(listview);//显示数据,也可以不调用,直接显示// --------无数据的情况下----------------// datas = getDatas(false);//无数据// mShowView.showByType(CommonShowView.TYPE_EMPTY);// ---------数据加载失败的情况下---------------mShowView.showByType(CommonShowView.TYPE_ERROR); } private List<String> getDatas(boolean flag) {List<String> datas = new ArrayList<>();datas.add("这是第一行的data");datas.add("这是第2行的data");datas.add("这是第三行的data");datas.add("这是第4行的data");if (flag) { return datas;}else { return null;} } class MyAdapter extends BaseAdapter {private List<String> datas;private Context mContext;public MyAdapter(Context mContext, List<String> datas) { this.mContext = mContext; this.datas = datas;}@Overridepublic int getCount() { // TODO Auto-generated method stub return datas.size();}@Overridepublic Object getItem(int position) { // TODO Auto-generated method stub return datas.get(position);}@Overridepublic long getItemId(int position) { // TODO Auto-generated method stub return position;}@Overridepublic View getView(int position, View convertView, ViewGroup parent) { // 这里只举个小例子,没有考虑性能 优化 TextView tv = new TextView(mContext); tv.setTextSize(16f); tv.setText(datas.get(position)); return tv;} }}目前只是做了个超级简单的样式,具体的展示根据需求再改再封装。帖个图:

以上就是ListView数据为空及加载错误处理的方法,希望对大家的学习有所帮助。