LoadingPage的抽取

来源:互联网 发布:手机上怎样申请淘宝号 编辑:程序博客网 时间:2024/06/05 13:33

抽取的动机

任何一个联网的view界面展示都有四种情况,

①正在加载

②加载失败

③加载成功,但是没有数据

④加载成功,同时返回数据

public abstract class LoadingPager extends FrameLayout {//1.定义4种不同的显示状态private static final int STATE_LOADING = 1;private static final int STATE_ERROR = 2;private static final int STATE_EMPTY = 3;private static final int STATE_SUCCESS = 4;private int state_current = STATE_LOADING;//默认情况下,当前状态为正在加载//2.提供4种不同的界面private View view_loading;private View view_error;private View view_empty;private View view_success;private LayoutParams params;public LoadingPager(Context context) {    this(context, null);}public LoadingPager(Context context, AttributeSet attrs) {    this(context, attrs, 0);}public LoadingPager(Context context, AttributeSet attrs, int defStyleAttr) {    super(context, attrs, defStyleAttr);    init();}//初始化方法private void init() {    //实例化view    //1.提供布局显示的参数    params = new LayoutParams(ViewGroup.LayoutParams.MATCH_PARENT, ViewGroup.LayoutParams.MATCH_PARENT);    if (view_loading == null) {        //2.加载布局        view_loading = UIUtils.getView(R.layout.page_loading);        //3.添加到当前的frameLayout中        addView(view_loading, params);    }    if (view_empty == null) {        //2.加载布局        view_empty = UIUtils.getView(R.layout.page_empty);        //3.添加到当前的frameLayout中        addView(view_empty, params);    }    if (view_error == null) {        //2.加载布局        view_error = UIUtils.getView(R.layout.page_error);        //3.添加到当前的frameLayout中        addView(view_error, params);    }    showSafePage();}//保证如下的操作在主线程中执行的:更新界面private void showSafePage() {    UIUtils.runOnUiThread(new Runnable() {        @Override        public void run() {            //保证run()中的操作在主线程中执行            showPage();        }    });}private void showPage() {    //根据当前state_current的值,决定显示哪个view    view_loading.setVisibility(state_current == STATE_LOADING ? View.VISIBLE : View.INVISIBLE);    view_error.setVisibility(state_current == STATE_ERROR ? View.VISIBLE : View.INVISIBLE);    view_empty.setVisibility(state_current == STATE_EMPTY ? View.VISIBLE : View.INVISIBLE);    if (view_success == null) {        view_success = UIUtils.getView(layoutId());        addView(view_success, params);    }    view_success.setVisibility(state_current == STATE_SUCCESS ? View.VISIBLE : View.INVISIBLE);}public abstract int layoutId();private ResultState resultState;//在show()中实现联网加载数据public void show() {    String url = url();    if (TextUtils.isEmpty(url)) {        resultState = ResultState.SUCCESS;        resultState.setContent("");        loadImage();        return;    }    UIUtils.getHandler().postDelayed(new Runnable() {        @Override        public void run() {            //可以换成OKHttp,retrofit等其他框架            AsyncHttpClient client = new AsyncHttpClient();            client.get(url(), params(), new AsyncHttpResponseHandler() {                @Override                public void onSuccess(String content) {                    if (TextUtils.isEmpty(content)) {// "" or null                        //state_current = STATE_EMPTY;                        resultState = ResultState.EMPTY;                        resultState.setContent("");                    } else {                        //state_current = STATE_SUCCESS;                        resultState = ResultState.SUCCESS;                        resultState.setContent(content);                    }                    //showSafePage();                    loadImage();                }                @Override                public void onFailure(Throwable error, String content) {                    //state_current = STATE_ERROR;                    resultState = ResultState.ERROR;                    resultState.setContent("");                    // showSafePage();                    loadImage();                }            });        }    }, 2000);}private void loadImage() {    switch (resultState) {        case ERROR:            state_current = STATE_ERROR;            break;        case EMPTY:            state_current = STATE_EMPTY;            break;        case SUCCESS:            state_current = STATE_SUCCESS;            break;    }    //根据修改以后的state_current,更新视图的显示。    showSafePage();    if (state_current == STATE_SUCCESS) {        onSuccss(resultState, view_success);    }}protected abstract void onSuccss(ResultState resultState, View view_success);//提供联网的请求参数protected abstract RequestParams params();//提供联网的请求地址public abstract String url();//提供枚举类,封装联网以后的状态值和数据public enum ResultState {    ERROR(2), EMPTY(3), SUCCESS(4);    int state;    ResultState(int state) {        this.state = state;    }    private String content;    public String getContent() {        return content;    }    public void setContent(String content) {        this.content = content;    }}}

BaseFragment中简单使用

@Nullable@Overridepublic View onCreateView(LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {  /*  View view= UIUtils.getView(getLayoutId());    unbinder = ButterKnife.bind(this, view);    initTitle();    initData();*/    loadingPager = new LoadingPager(container.getContext()) {        @Override        public int layoutId() {            return getLayoutId();        }        @Override        protected void onSuccss(ResultState resultState, View view_sucess) {            unbinder = ButterKnife.bind(BaseFragment.this, view_sucess);            initData(resultState.getContent());            initTitle();        }        @Override        protected RequestParams params() {            return getParams();        }        @Override        public String url() {            return geturl();        }    };    return loadingPager;}
阅读全文
'); })();
0 0
原创粉丝点击
热门IT博客
热门问题 老师的惩罚 人脸识别 我在镇武司摸鱼那些年 重生之率土为王 我在大康的咸鱼生活 盘龙之生命进化 天生仙种 凡人之先天五行 春回大明朝 姑娘不必设防,我是瞎子 天翔赛鸽俱乐部 保定天翔赛鸽俱乐部 天鸽互动控股有限公司 一到三十天幼鸽图片 鸽蛋1一17天受精图 陕西新天鹰赛鸽公棚 云南天泽赛鸽中心 0到35天幼鸽成长图 天鸽股价 天马赛鸽公棚春棚 任丘天发赛鸽俱乐部首页 云南天放公棚赛鸽中心 天鸽集团 农村鸽舍抓天落设计图片 天兴公棚集鸽记录 天下问鸽 天下鸽问 天鸿 杨天鸿 世纪天鸿 天鸿集团 天鸿公寓 天鸿木门 天鸿宾馆 天鸿公园大道 烟台天鸿职业培训学校 天鸿万象新天 北京天鸿集团公司 万象新天 邳州五星级酒店天鸿 黑天鹅 黑天鹅事件 天鹅洗衣机 天鹅湖 天鹅臂 天鹅图片 小天鹅 天鹅简笔画 四小天鹅 天鹅颈 黑天鹅蛋糕