国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 系統 > Android > 正文

解決Android ListView數據為空及加載錯誤的方法

2020-04-11 10:46:42
字體:
來源:轉載
供稿:網友

在項目中,都會用到ListView或GridView等列表控件。一般會用來展示從網絡請求的數據 。如果請求的數據為空或者在請求的時候正好無沒有網絡了,我們的界面應該如何展示呢?數據為空的時候,ListView可以使用setEmptyView (View emptyView) 方法來我們需要的統一界面。數據加載失敗呢?我們也可以統一進行處理。

//下面這個類是簡單地封裝用于無數據及加載錯誤的一個頁面。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" > <TextView  android: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" /> <Button  android: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;  }  @Override  public int getCount() {   // TODO Auto-generated method stub   return datas.size();  }  @Override  public Object getItem(int position) {   // TODO Auto-generated method stub   return datas.get(position);  }  @Override  public long getItemId(int position) {   // TODO Auto-generated method stub   return position;  }  @Override  public View getView(int position, View convertView, ViewGroup parent) {   // 這里只舉個小例子,沒有考慮性能 優化   TextView tv = new TextView(mContext);   tv.setTextSize(16f);   tv.setText(datas.get(position));   return tv;  } }}

目前只是做了個超級簡單的樣式,具體的展示根據需求再改再封裝。帖個圖:

以上就是ListView數據為空及加載錯誤處理的方法,希望對大家的學習有所幫助。

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 长岛县| 樟树市| 新丰县| 河池市| 抚州市| 玉屏| 汉沽区| 普兰县| 海南省| 崇礼县| 公主岭市| 濮阳市| 海晏县| 厦门市| 田林县| 高尔夫| 平乡县| 呼伦贝尔市| 库车县| 澄迈县| 安达市| 北辰区| 南漳县| 本溪市| 孟村| 绿春县| 齐河县| 富平县| 故城县| 沁阳市| 芦山县| 介休市| 阳曲县| 拜泉县| 临颍县| 苏尼特右旗| 湖口县| 观塘区| 丹阳市| 黎平县| 井陉县|