我的编程空间,编程开发者的网络收藏夹
学习永远不晚

Android中怎么自定义新闻加载页面

短信预约 -IT技能 免费直播动态提醒
省份

北京

  • 北京
  • 上海
  • 天津
  • 重庆
  • 河北
  • 山东
  • 辽宁
  • 黑龙江
  • 吉林
  • 甘肃
  • 青海
  • 河南
  • 江苏
  • 湖北
  • 湖南
  • 江西
  • 浙江
  • 广东
  • 云南
  • 福建
  • 海南
  • 山西
  • 四川
  • 陕西
  • 贵州
  • 安徽
  • 广西
  • 内蒙
  • 西藏
  • 新疆
  • 宁夏
  • 兵团
手机号立即预约

请填写图片验证码后获取短信验证码

看不清楚,换张图片

免费获取短信验证码

Android中怎么自定义新闻加载页面

本篇文章给大家分享的是有关Android中怎么自定义新闻加载页面,小编觉得挺实用的,因此分享给大家学习,希望大家阅读完这篇文章后可以有所收获,话不多说,跟着小编一起来看看吧。

首先的定义三个布局,为什么是三个,因为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:class="lazy" data-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:class="lazy" data-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>

初始化控件

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 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, 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);    //如果发生错误,点击重新加载    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, 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;    }    // 请求服务器 获取服务器上数据 进行判断    // 请求服务器 返回一个结果    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();}

三、使用:

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;  }    public abstract View createSuccessView();    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中怎么自定义新闻加载页面,小编相信有部分知识点可能是我们日常工作会见到或用到的。希望你能通过这篇文章学到更多知识。更多详情敬请关注编程网行业资讯频道。

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

Android中怎么自定义新闻加载页面

下载Word文档到电脑,方便收藏和打印~

下载Word文档

猜你喜欢

Android中怎么自定义新闻加载页面

本篇文章给大家分享的是有关Android中怎么自定义新闻加载页面,小编觉得挺实用的,因此分享给大家学习,希望大家阅读完这篇文章后可以有所收获,话不多说,跟着小编一起来看看吧。1、首先的定义三个布局,为什么是三个,因为unkonw与loadi
2023-05-30

Android自定义下拉刷新上拉加载

本文实例为大家分享了Android自定义下拉刷新上拉加载的具体实现步骤,供大家参考,具体内容如下 实现的方式是SwipeRefreshLayout + RecyclerView 的VIewType 首先看效果:总的思路:布局文件
2022-06-06

Android中怎么自定义加载圈动画效果

这篇文章给大家介绍Android中怎么自定义加载圈动画效果,内容非常详细,感兴趣的小伙伴们可以参考借鉴,希望对大家能有所帮助。具体代码如下:package blog.csdn.net.mchenys.myanimationloading;i
2023-05-30

Android开发中如何自定义加载动画

这篇文章主要为大家展示了“Android开发中如何自定义加载动画”,内容简而易懂,条理清晰,希望能够帮助大家解决疑惑,下面让小编带领大家一起研究并学习一下“Android开发中如何自定义加载动画”这篇文章吧。一、demo简介1.效果展示如下
2023-06-29

java怎么自定义类加载器

要自定义类加载器,可以按照以下步骤进行:1. 创建一个类,继承自java.lang.ClassLoader类,覆盖其中的findClass()方法。在findClass()方法中,根据自定义的类加载逻辑,加载指定的类文件并返回一个Class
2023-09-14

java类加载器怎么自定义

要自定义Java类加载器,可以继承ClassLoader类,并重写它的findClass()方法。下面是一个简单的示例:```javapublic class MyClassLoader extends ClassLoader {@Over
2023-09-14

Spring MVC中怎么自定义404 Not Found页面

这篇文章给大家介绍Spring MVC中怎么自定义404 Not Found页面,内容非常详细,感兴趣的小伙伴们可以参考借鉴,希望对大家能有所帮助。在WEB-INF的web.xml里添加一个新的区域:意思是一旦有404错误发生时,显示res
2023-06-02

Android中怎么通过自定义view实现进度条加载效果

Android中怎么通过自定义view实现进度条加载效果,针对这个问题,这篇文章详细介绍了相对应的分析和解答,希望可以帮助更多想解决这个问题的小伙伴找到更简单易行的方法。分析图:代码如下:package com.example.dotloa
2023-05-30

怎么在java中自定义一个类加载器

本篇文章为大家展示了怎么在java中自定义一个类加载器,内容简明扼要并且容易理解,绝对能使你眼前一亮,通过这篇文章的详细介绍希望你能有所收获。如果要使用自定义类加载器加载class文件,就需要继承java.lang.ClassLoader类
2023-05-30

Android中怎么自定义相机

本篇文章给大家分享的是有关Android中怎么自定义相机,小编觉得挺实用的,因此分享给大家学习,希望大家阅读完这篇文章后可以有所收获,话不多说,跟着小编一起来看看吧。使用Android 系统相机的方法:要想让应用有相机的action,咱们就
2023-05-30

Android中自定义加载样式图片的具体实现

先让大家看看效果图吧,相信很多Android初学者都想知道这中效果是怎么实现的,来上图: 想实现上面这张图中的自定义加载样式,其实很简单,首先我们需要的布局组件有ProcessBar和TextView,下面是布局文件的代码(只是加载的页面的
2022-06-06

Android UI自定义ListView实现下拉刷新和加载更多效果

关于实现ListView下拉刷新和加载更多的实现,我想网上一搜就一堆。不过我就没发现比较实用的,要不就是实现起来太复杂,要不就是不健全的。因为小巫近期要开发新浪微博客户端,需要实现ListView的下拉刷新,所以就想把这个UI整合到项目当中
2022-06-06

Android自定义listview布局实现上拉加载下拉刷新功能

listview实现上拉加载以及下拉刷新的方式有很多。下面是我写的一种自定义的布局,复用性也比较的强。首先就是继承的listview的自定义view。 AutoListView.Java:package com.example.m
2022-06-06

Android 自定义标题栏 显示网页加载进度的方法实例

这阵子在做Lephone的适配,测试组提交一个bug:标题栏的文字较长时没有显示完全,其实这并不能算个bug,并且这个问题在以前其他机器也没有出现,只是说在Lephone的这个平台上显示得不怎么美观,因为联想将原生的标题栏UI进行了修改。修
2022-06-06

怎么使用swiper自定义分页点击跳转指定页面

这篇文章主要介绍“怎么使用swiper自定义分页点击跳转指定页面”,在日常操作中,相信很多人在怎么使用swiper自定义分页点击跳转指定页面问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”怎么使用swiper自
2023-07-06

Android中怎么自定义Progress控件

Android中怎么自定义Progress控件,针对这个问题,这篇文章详细介绍了相对应的分析和解答,希望可以帮助更多想解决这个问题的小伙伴找到更简单易行的方法。主要就是需求就是椭圆进度,百分比跟随渐变背景,这样一想其实就是一个布局,然后控制
2023-05-31

编程热搜

  • Python 学习之路 - Python
    一、安装Python34Windows在Python官网(https://www.python.org/downloads/)下载安装包并安装。Python的默认安装路径是:C:\Python34配置环境变量:【右键计算机】--》【属性】-
    Python 学习之路 - Python
  • chatgpt的中文全称是什么
    chatgpt的中文全称是生成型预训练变换模型。ChatGPT是什么ChatGPT是美国人工智能研究实验室OpenAI开发的一种全新聊天机器人模型,它能够通过学习和理解人类的语言来进行对话,还能根据聊天的上下文进行互动,并协助人类完成一系列
    chatgpt的中文全称是什么
  • C/C++中extern函数使用详解
  • C/C++可变参数的使用
    可变参数的使用方法远远不止以下几种,不过在C,C++中使用可变参数时要小心,在使用printf()等函数时传入的参数个数一定不能比前面的格式化字符串中的’%’符号个数少,否则会产生访问越界,运气不好的话还会导致程序崩溃
    C/C++可变参数的使用
  • css样式文件该放在哪里
  • php中数组下标必须是连续的吗
  • Python 3 教程
    Python 3 教程 Python 的 3.0 版本,常被称为 Python 3000,或简称 Py3k。相对于 Python 的早期版本,这是一个较大的升级。为了不带入过多的累赘,Python 3.0 在设计的时候没有考虑向下兼容。 Python
    Python 3 教程
  • Python pip包管理
    一、前言    在Python中, 安装第三方模块是通过 setuptools 这个工具完成的。 Python有两个封装了 setuptools的包管理工具: easy_install  和  pip , 目前官方推荐使用 pip。    
    Python pip包管理
  • ubuntu如何重新编译内核
  • 改善Java代码之慎用java动态编译

目录