Android自定义网络请求状态组件
来源:互联网 发布:淘宝企业店铺怎么操作 编辑:程序博客网 时间:2024/06/05 16:30
在之前的开发过程中,遇到网络请求一般都会有展示网络请求状态的一些标识:“加载中”、“网络错误”、“内容为空”等。如果用户每次根据请求的状态都对这3种状态进行判断再确定显示与否又比较麻烦。当然,你可以将 其封装成方法放到Activity中,但是这样代码显示会比较臃肿。
自己尝试将网络请求的状态封装到一个自定义控件当中,其中基本上对每一种网络请求的结果都进行了封装,这样也省了不少事。
加载中:
加载失败:
内容为空:
布局代码
<?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"> <!--网络失败--> <LinearLayout android:id="@+id/ll_request_net_fail" android:layout_width="match_parent" android:layout_height="match_parent" android:background="#f6f6f6" android:visibility="gone" android:gravity="center_horizontal" android:orientation="vertical"> <ImageView android:id="@+id/error_image" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_marginTop="118dip" android:src="@drawable/emptypage_icon_wifi" /> <TextView android:id="@+id/error_message" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_marginTop="27.5dip" android:text="网络加载失败,请刷新重试" android:textColor="#999999" android:textSize="15sp" /> <TextView android:id="@+id/error_btn" android:layout_width="170dip" android:layout_height="40dip" android:layout_marginTop="22.5dip" android:background="@drawable/btn_bg_green" android:gravity="center" android:text="重新加载" android:textColor="#ffffff" android:textSize="15sp" /> </LinearLayout> <!--内容为空--> <LinearLayout android:id="@+id/ll_request_no_task" android:layout_width="match_parent" android:layout_height="match_parent" android:orientation="vertical" android:background="#f6f6f6" android:visibility="gone" android:gravity="center_horizontal"> <ImageView android:id="@+id/iv_task_null" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_marginTop="105dp" android:src="@drawable/emptypage_icon_search"/> <TextView android:id="@+id/tv_task_null" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_marginTop="20dp" android:text="暂无任务" android:textColor="#999999" android:textSize="20sp"/> </LinearLayout> <!--加载中--> <RelativeLayout android:id="@+id/rl_request_loading" android:layout_width="match_parent" android:layout_height="match_parent" android:visibility="gone" android:gravity="center"> <LinearLayout android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_centerInParent="true" android:gravity="center_vertical" android:background="@android:color/transparent" android:orientation="horizontal"> <ProgressBar android:id="@+id/progress_loading" style="@style/my_progress_bar" android:layout_width="30dip" android:layout_height="30dip" /> <TextView android:id="@+id/loading_msg" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_marginLeft="8dip" android:text="全力加载中..." android:textColor="#000000" android:textSize="14sp" /> </LinearLayout> </RelativeLayout></FrameLayout>
逻辑代码
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); } }
阅读全文
0 0
- Android自定义网络请求状态组件
- Android 网络请求及网络状态判断
- Android 网络请求及网络状态判断
- Android 自定义组件及组件如何保存/恢复状态
- 自定义ProgressStateLayout实现网络请求状态间的相互切换
- Android自定义框架之网络请求
- Android自定义框架之网络请求 .
- Android为网络请求自定义加载动画
- 请求当前网络状态
- android网络请求网络连接状态判断 & 监控网络状态改变
- httppsot android 检查网络状态 发送服务器请求
- Android--okhttp框架封装思路/网络请求组件的创建
- android网络请求组件(一)OkHttp3的封装使用
- 自定义网络请求引擎
- 自定义网络请求
- 自定义轮播图+网络请求
- http请求判断网络状态
- 网络请求错误状态码
- 279. Perfect Squares
- 一个简单的银行系统
- transient
- codeforce814B An express train to reveries (有点高中分类讨论的意思)
- [P2678]跳石头
- Android自定义网络请求状态组件
- centos 6.5安装erlang 18.3
- 利用反射拼接sql语句
- 求三角形内任意一点到另一个三角形上的映射坐标点
- 在Ubuntu中安装Flawfinder
- Android 分包导致报错ClassNotFoundException
- Javascript触发事件列表
- crypt1-section1.3
- Java的日期与MySQL数据库日期的转化问题