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);        }    }
原创粉丝点击