博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Android自定义网络请求状态组件
阅读量:2123 次
发布时间:2019-04-30

本文共 4323 字,大约阅读时间需要 14 分钟。

  • 在之前的开发过程中,遇到网络请求一般都会有展示网络请求状态的一些标识:“加载中”、“网络错误”、“内容为空”等。如果用户每次根据请求的状态都对这3种状态进行判断再确定显示与否又比较麻烦。当然,你可以将 其封装成方法放到Activity中,但是这样代码显示会比较臃肿。

  • 自己尝试将网络请求的状态封装到一个自定义控件当中,其中基本上对每一种网络请求的结果都进行了封装,这样也省了不少事。

加载中:

这里写图片描述

加载失败:

这里写图片描述

内容为空:

这里写图片描述

布局代码

逻辑代码

import android.content.Context;import android.text.TextUtils;import android.util.AttributeSet;import android.widget.ImageView;import android.widget.LinearLayout;import android.widget.RelativeLayout;import android.widget.TextView;import android.widget.Toast;import com.example.request.R;public class RequestView extends RelativeLayout {
private LinearLayout noTaskLayout; private LinearLayout netFailLayout; private RelativeLayout loadingLayout; private TextView btnError; private ImageView emptyImg; private TextView emptyText; private int successTimes = 0; public RequestView(Context context) { this(context, null); } public RequestView(Context context, AttributeSet attrs) { this(context, attrs, 0); } public RequestView(Context context, AttributeSet attrs, int defStyleAttr) { super(context, attrs, defStyleAttr); inflate(context, R.layout.layout_request, this); init(); } private void init() { noTaskLayout = (LinearLayout) findViewById(R.id.ll_request_no_task); netFailLayout = (LinearLayout) findViewById(R.id.ll_request_net_fail); loadingLayout = (RelativeLayout) findViewById(R.id.rl_request_loading); btnError = (TextView) findViewById(R.id.error_btn); emptyImg = (ImageView) findViewById(R.id.iv_task_null); emptyText = (TextView) findViewById(R.id.tv_task_null); noTaskLayout.setVisibility(GONE); netFailLayout.setVisibility(GONE); loadingLayout.setVisibility(GONE); } /** * 加载成功 */ public void success() { successTimes++; noTaskLayout.setVisibility(GONE); netFailLayout.setVisibility(GONE); loadingLayout.setVisibility(GONE); } /** * 开始加载 */ public void startLoad() { loadingLayout.setVisibility(VISIBLE); } /** * 停止加载 */ public void stopLoad() { loadingLayout.setVisibility(GONE); } /** * 内容为空 */ public void empty() { noTaskLayout.setVisibility(VISIBLE); netFailLayout.setVisibility(GONE); loadingLayout.setVisibility(GONE); } /** * 网络错误 */ public void error() { if (successTimes < 1) { netFailLayout.setVisibility(VISIBLE); noTaskLayout.setVisibility(GONE); loadingLayout.setVisibility(GONE); } else { Toast.makeText(getContext(), "网络错误,请重试~", Toast.LENGTH_SHORT).show(); } } /** * 请求成功次数 * @return */ public int getSuccessTimes() { return successTimes; } /** * 设置结果为空默认图 * @param resId */ public void setEmptyImg(int resId) { emptyImg.setImageResource(resId); } /** * 设置列表为空提示信息 * @param text */ public void setEmptyText(String text) { if (!TextUtils.isEmpty(text)) { emptyText.setText(text); } } /** * 重新加载按钮显示文本 * @param msg */ public void setFixButtonMsg(String msg) { if (!TextUtils.isEmpty(msg)) { btnError.setText(msg); } } /** * 显示重新加载按钮 */ public void showFixButton() { btnError.setVisibility(VISIBLE); } /** * 不显示重新加载按钮 */ public void hideFixButton() { btnError.setVisibility(INVISIBLE); } public void showLoading() { loadingLayout.setVisibility(VISIBLE); } public void hideLoading() { loadingLayout.setVisibility(GONE); } public void showEmpty() { noTaskLayout.setVisibility(VISIBLE); } public void hideEmpty() { noTaskLayout.setVisibility(GONE); } public void showError() { netFailLayout.setVisibility(VISIBLE); } public void hideError() { netFailLayout.setVisibility(GONE); } public void setFixActionListener(OnClickListener listener) { if (listener != null) { btnError.setOnClickListener(listener); } }
你可能感兴趣的文章
数据类型 java转换
查看>>
"NetworkError: 400 Bad Request - http://172.16.47.117:8088/rhip/**/####t/approval?date=976
查看>>
mybatis 根据 数据库表 自动生成 实体
查看>>
win10将IE11兼容ie10
查看>>
checkbox设置字体颜色
查看>>
第一篇 HelloWorld.java重新学起
查看>>
ORACLE表空间扩张
查看>>
orcal 循环执行sql
查看>>
web.xml配置监听器,加载数据库信息配置文件ServletContextListener
查看>>
结构型模式之桥接模式(Bridge)
查看>>
行为型模式之状态模式(State)
查看>>
行为型模式之策略模式(Strategy)
查看>>
行为型模式之模板方法模式(TemplateMethod)
查看>>
行为型模式之访问者模式(Visitor)
查看>>
大小端详解
查看>>
source insight使用方法简介
查看>>
<stdarg.h>头文件的使用
查看>>
C++/C 宏定义(define)中# ## 的含义 宏拼接
查看>>
Git安装配置
查看>>
linux中fork()函数详解
查看>>