真实的国产乱ⅩXXX66竹夫人,五月香六月婷婷激情综合,亚洲日本VA一区二区三区,亚洲精品一区二区三区麻豆

成都創(chuàng)新互聯(lián)網(wǎng)站制作重慶分公司

Android中怎么自定義新聞加載頁面

本篇文章給大家分享的是有關(guān)Android中怎么自定義新聞加載頁面,小編覺得挺實用的,因此分享給大家學習,希望大家閱讀完這篇文章后可以有所收獲,話不多說,跟著小編一起來看看吧。

成都創(chuàng)新互聯(lián)主打移動網(wǎng)站、網(wǎng)站建設、成都做網(wǎng)站、網(wǎng)站改版、網(wǎng)絡推廣、網(wǎng)站維護、域名注冊、等互聯(lián)網(wǎng)信息服務,為各行業(yè)提供服務。在技術(shù)實力的保障下,我們?yōu)榭蛻舫兄Z穩(wěn)定,放心的服務,根據(jù)網(wǎng)站的內(nèi)容與功能再決定采用什么樣的設計。最后,要實現(xiàn)符合網(wǎng)站需求的內(nèi)容、功能與設計,我們還會規(guī)劃穩(wěn)定安全的技術(shù)方案做保障。

1、首先的定義三個布局,為什么是三個,因為unkonw與loading的頁面可以使用同一個,而success的頁面是加載數(shù)據(jù)的頁面,這里不用定義

1)loading頁面布局,只有一個進度條



  

2)空頁面只有一張圖片,顯示沒有數(shù)據(jù)



  

3)錯誤頁面有一張錯誤圖片與按鈕,點擊按鈕重新加載數(shù)據(jù)



  
    
    

4、初始化控件

/**
* 初始化加載三種布局
*/
private void init() {
    mLoadingView = initView(R.layout.loadpage_loading);
    mEmptyView = initView(R.layout.loadpage_empty);
    mErrorView = initView(R.layout.loadpage_error);
    //如果發(fā)生錯誤,點擊重新加載
    Button btnError = (Button) mErrorView.findViewById(R.id.page_bt);
    btnError.setOnClickListener(new OnClickListener() {
      @Override
      public void onClick(View v) {
        show();
      }
    });
    showPages();
}

5、全部代碼:

/**
 * @描述 加載頁面
 * @項目名稱 App_Shop
 * @包名 com.android.shop.view
 * @類名 LoadingPage
 * @author chenlin
 * @date 2014年3月29日 下午8:49:39
 */
public abstract class LoadingPage extends FrameLayout {
  private final static int STATE_UNKNOW = 0;
  private final static int STATE_LOADING = 1;
  private final static int STATE_ERROT = 2;
  private final static int STATE_EMPTY = 3;
  private final static int STATE_SUCCESS = 4;
  // 不能使用靜態(tài)的,
  private int currentState = STATE_UNKNOW;
  private View mLoadingView; // 加載
  private View mEmptyView; // 空頁面
  private View mErrorView; // 網(wǎng)絡錯誤
  private View mSuccessView; // 加載成功后的頁面
  private Context mContext;
  /**
   * 定義枚舉類型
   */
  public enum LoadResult {
    error(STATE_ERROT), empty(STATE_EMPTY), success(STATE_SUCCESS);
    int value;
    LoadResult(int value) {
      this.value = value;
    }
    public int getValue() {
      return value;
    }
  }
  public LoadingPage(Context context, AttributeSet attrs, int defStyle) {
    super(context, attrs, defStyle);
    mContext = context;
    init();
  }
  public LoadingPage(Context context, AttributeSet attrs) {
    this(context, attrs, 0);
  }
  public LoadingPage(Context context) {
    this(context, null);
  }
  /**
   * 初始化加載三種布局
   */
  private void init() {
    mLoadingView = initView(R.layout.loadpage_loading);
    mEmptyView = initView(R.layout.loadpage_empty);
    mErrorView = initView(R.layout.loadpage_error);
    //如果發(fā)生錯誤,點擊重新加載
    Button btnError = (Button) mErrorView.findViewById(R.id.page_bt);
    btnError.setOnClickListener(new OnClickListener() {
      @Override
      public void onClick(View v) {
        show();
      }
    });
    showPages();
  }
  public View initView(int resId) {
    View view = View.inflate(mContext, resId, null);
    if (view != null) {
      this.addView(view, new FrameLayout.LayoutParams(LayoutParams.MATCH_PARENT, LayoutParams.MATCH_PARENT));
      return view;
    }
    return null;
  }
  private void showPages() {
    //加載頁面顯示與不顯示
    mLoadingView.setVisibility(currentState == STATE_UNKNOW || currentState == STATE_LOADING ? View.VISIBLE
        : View.GONE);
    //空頁面
    mEmptyView.setVisibility(currentState == STATE_EMPTY ? View.VISIBLE : View.GONE);
    //錯誤頁面顯示
    mErrorView.setVisibility(currentState == STATE_ERROT ? View.VISIBLE : View.GONE);
    //如果數(shù)據(jù)加載成功了,
    if (currentState == STATE_SUCCESS) {
      if (mSuccessView == null) {
        //加載成功頁面信息,成功后的頁面就是新聞頁面信息
        mSuccessView = createSuccessView();
        //添加頁面到framelayout里
        addView(mSuccessView, new FrameLayout.LayoutParams(LayoutParams.MATCH_PARENT,LayoutParams.MATCH_PARENT));
        mSuccessView.setVisibility(View.VISIBLE);
      }else {
        mSuccessView.setVisibility(View.GONE);
      }
    }
  }
  public void show() {
    if (currentState == STATE_EMPTY || currentState == STATE_ERROT) {
      currentState = STATE_LOADING;
    }
    // 請求服務器 獲取服務器上數(shù)據(jù) 進行判斷
    // 請求服務器 返回一個結(jié)果
    ThreadManager.getInstance().createLongPool().execute(new Runnable() {
      @Override
      public void run() {
        //從服務器加載數(shù)據(jù),得到返回的狀態(tài)信息
        final LoadResult result = loadFromServer();
        if (result != null) {
          Util.runOnUiThread(new Runnable() {
            @Override
            public void run() {
              currentState = result.getValue();
              //顯示
              showPages();
            }
          });
        }
      }
    });
    showPages();
  }
  public abstract View createSuccessView();
  public abstract LoadResult loadFromServer();
}

三、使用:

/**
 * @描述     fragment
 * @項目名稱   App_Shop
 * @包名     com.android.shop.fragment
 * @類名     BaseFragment
 * @author   chenlin
 * @date    2014年3月28日 下午10:33:59
 */
public abstract class BaseFragment extends Fragment {
  private LoadingPage mLoadingPage;
  @Override
  public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
    if (mLoadingPage == null) {
      mLoadingPage = new LoadingPage(getActivity()){
        @Override
        public View createSuccessView() {
          return BaseFragment.this.createSuccessView();
        }
        @Override
        public LoadResult loadFromServer() {
          return BaseFragment.this.load();
        }
      };
    }else {
      ViewUtil.removeParent(mLoadingPage);
    }
    return mLoadingPage;
  }
  /***
   * 創(chuàng)建成功的界面
   * @return
   */
  public abstract View createSuccessView();
  /**
   * 從服務器得到結(jié)果嗎
   * @return
   */
  protected abstract LoadResult load();
  /**
   * 顯示加載頁面
   */
  public void show(){
    if (mLoadingPage != null) {
      mLoadingPage.show();
    }
  }
  /**校驗數(shù)據(jù) */
  public LoadResult checkData(List datas){
    if (datas == null) {
      return LoadResult.error;
    }else {
      if (datas.size() == 0) {
        return LoadResult.empty;
      }else {
        return LoadResult.success;
      }
    }
  }
}

以上就是Android中怎么自定義新聞加載頁面,小編相信有部分知識點可能是我們?nèi)粘9ぷ鲿姷交蛴玫降?。希望你能通過這篇文章學到更多知識。更多詳情敬請關(guān)注創(chuàng)新互聯(lián)行業(yè)資訊頻道。


本文標題:Android中怎么自定義新聞加載頁面
網(wǎng)站URL:http://weahome.cn/article/gepeod.html

其他資訊

在線咨詢

微信咨詢

電話咨詢

028-86922220(工作日)

18980820575(7×24)

提交需求

返回頂部