Android开发实现自定义新闻加载页面功能实例

Android开发实现自定义新闻加载页面功能实例,第1张

概述本文实例讲述了Android开发实现自定义新闻加载页面功能。分享给大家供大家参考,具体如下:

本文实例讲述了AndroID开发实现自定义新闻加载页面功能。分享给大家供大家参考,具体如下:

一、概述:

1、效果演示:

2、说明:在新闻页面刚加载的时候,一般会出现五种状态

未知状态(STATE_UNKNow)、空状态(STATE_EMPTY)、加载中(STATE_LOADING)、错误(STATE_ERROT)、成功(STATE_SUCCESS

因为每个Detail页面都会出现,所以我们可以把他们封装成一个LoadPage的自定义view,可以复用

二、实现:

1、首先的定义三个布局,为什么是三个,因为unkonw与loading的页面可以使用同一个,而success的页面是加载数据的页面,这里不用定义

1)loading页面布局,只有一个进度条

<?xml version="1.0" enCoding="utf-8"?><relativeLayout xmlns:androID="http://schemas.androID.com/apk/res/androID"  androID:layout_wIDth="match_parent"  androID:layout_height="match_parent" >  <Progressbar        androID:layout_wIDth="wrap_content"    androID:layout_height="wrap_content"    androID:layout_centerHorizontal="true"    androID:layout_centerVertical="true" /></relativeLayout>

2)空页面只有一张图片,显示没有数据

<?xml version="1.0" enCoding="utf-8"?><relativeLayout xmlns:androID="http://schemas.androID.com/apk/res/androID"  androID:layout_wIDth="match_parent"  androID:layout_height="match_parent" >  <ImageVIEw    androID:layout_wIDth="wrap_content"    androID:layout_height="wrap_content"    androID:layout_centerHorizontal="true"    androID:layout_centerVertical="true"    androID:src="@drawable/ic_empty_page" /></relativeLayout>

3)错误页面有一张错误图片与按钮,点击按钮重新加载数据

<?xml version="1.0" enCoding="utf-8"?><FrameLayout xmlns:androID="http://schemas.androID.com/apk/res/androID"  androID:layout_wIDth="match_parent"  androID:layout_height="match_parent"  androID:orIEntation="vertical" >  <relativeLayout    androID:layout_wIDth="match_parent"    androID:layout_height="match_parent"    androID:gravity="center" >    <ImageVIEw      androID:ID="@+ID/page_iv"      androID:layout_wIDth="100dp"      androID:layout_height="100dp"      androID:layout_centerHorizontal="true"      androID:scaleType="centerInsIDe"      androID:src="@drawable/ic_error_page" />    <button      androID:ID="@+ID/page_bt"      androID:layout_wIDth="wrap_content"      androID:layout_height="34dp"      androID:layout_below="@ID/page_iv"      androID:layout_centerHorizontal="true"      androID:layout_margintop="10dp"      androID:background="@drawable/btn_bg"      androID:ellipsize="end"      androID:paddingleft="10dp"      androID:paddingRight="10dp"      androID:singleline="true"      androID:text="@string/load_error"      androID:textcolor="#ff717171"      androID:textSize="14dp" />  </relativeLayout></FrameLayout>

4、初始化控件

/*** 初始化加载三种布局*/private voID init() {    mloadingVIEw = initVIEw(R.layout.loadpage_loading);    mEmptyVIEw = initVIEw(R.layout.loadpage_empty);    mErrorVIEw = initVIEw(R.layout.loadpage_error);    //如果发生错误,点击重新加载    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;  // 不能使用静态的,  private int currentState = STATE_UNKNow;  private VIEw mloadingVIEw; // 加载  private VIEw mEmptyVIEw; // 空页面  private VIEw mErrorVIEw; // 网络错误  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,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);    //如果发生错误,点击重新加载    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);    //如果数据加载成功了,    if (currentState == STATE_SUCCESS) {      if (mSuccessVIEw == null) {        //加载成功页面信息,成功后的页面就是新闻页面信息        mSuccessVIEw = createSuccessVIEw();        //添加页面到framelayout里        addVIEw(mSuccessVIEw,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;    }    // 请求服务器 获取服务器上数据 进行判断    // 请求服务器 返回一个结果    ThreadManager.getInstance().createLongPool().execute(new Runnable() {      @OverrIDe      public voID run() {        //从服务器加载数据,得到返回的状态信息        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<T> 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;  }  /***   * 创建成功的界面   * @return   */  public abstract VIEw createSuccessVIEw();  /**   * 从服务器得到结果吗   * @return   */  protected abstract LoadResult load();  /**   * 显示加载页面   */  public voID show(){    if (mloadingPage != null) {      mloadingPage.show();    }  }  /**校验数据 */  public LoadResult checkData(List<T> datas){    if (datas == null) {      return LoadResult.error;    }else {      if (datas.size() == 0) {        return LoadResult.empty;      }else {        return LoadResult.success;      }    }  }}

更多关于AndroID相关内容感兴趣的读者可查看本站专题:《Android开发入门与进阶教程》、《Android调试技巧与常见问题解决方法汇总》、《Android基本组件用法总结》、《Android视图View技巧总结》、《Android布局layout技巧总结》及《Android控件用法总结》

希望本文所述对大家AndroID程序设计有所帮助。

总结

以上是内存溢出为你收集整理的Android开发实现自定义新闻加载页面功能实例全部内容,希望文章能够帮你解决Android开发实现自定义新闻加载页面功能实例所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/web/1144101.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-05-31
下一篇 2022-05-31

发表评论

登录后才能评论

评论列表(0条)

保存