Android 中通用的Toolbar和Error,Empty,Loading UI 处理

在Android 开发中Activity几乎都有Toolbar(menu也在里面)和以及Http 请求的时候出现的Error,Empty,Loading等UI 需要处理,怎么能快速简单高效处理呢?


Android 中通用的Toolbar和Error,Empty,Loading UI 处理_第1张图片
image.png

首先定义BaseActivity 中的XML 定义

如下面所示,默认都是需要Toolbar 的,如果不需要就设置为不可见就好了;
而不同的Activity 中的内容实际是放在(FrameLayout)fl_content 中的。

R.layout.activity_base



    
    
    

    
    


怎么处理不同的Activity 中的内容实际是放在(FrameLayout)fl_content 中的呢?

   @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        mContext = BaseActivity.this;

        View rootView=customContentView(View.inflate(this, R.layout.activity_base, null));
        setContentView(rootView);

        initViews();
        initHttp();  //在这里进行Http 的请求
    }


    /**
     * 定制Custom View,Content 区域先留空,后面再动态的添加,同时
     * 增加Error,empty,Loading,timeout,等通用的场景处理,一处Root注入,处处可用
     *
     */
    private View customContentView(View rootView) {
        mToolbar = (Toolbar) findViewById(R.id.toolbar);
        if (mToolbar != null) {
            setSupportActionBar(mToolbar);
        }

        View content = View.inflate(this, getLayoutId(), null);
        if (content != null) {
            FrameLayout flContent = (FrameLayout) rootView.findViewById(R.id.fl_content);
            FrameLayout.LayoutParams params = new FrameLayout.LayoutParams(FrameLayout.LayoutParams.MATCH_PARENT,
                    FrameLayout.LayoutParams.MATCH_PARENT);
            flContent.addView(content, params);
            ButterKnife.bind(this, rootView);   //ButterKnife 绑定

            //增加Error,empty,Loading,timeout,等通用的场景处理
            mBaseLoadService = LoadSir.getDefault().register(content, new Callback.OnReloadListener() {
                @Override
                public void onReload(View v) {
                    onHttpReload(v);
                }
            });
        }
        return rootView;
    }

在加载数据的时候会出现Error,empty,Loading,timeout 等场景怎么处理呢?

这种问题几乎每个页面都会遇到,难道每个页面都是使用FrameLayout 叠加两层内容来处理?,推荐一个项目LoadSir:https://github.com/KingJA/LoadSir

在BaseActivity 中已在 LoadSir.getDefault().register(content 了

    private View customContentView(View rootView) {
        View content = View.inflate(this, getLayoutId(), null);
        if (content != null) {
            FrameLayout flContent = (FrameLayout) rootView.findViewById(R.id.fl_content);
            FrameLayout.LayoutParams params = new FrameLayout.LayoutParams(FrameLayout.LayoutParams.MATCH_PARENT,
                    FrameLayout.LayoutParams.MATCH_PARENT);
            flContent.addView(content, params);

            //增加Error,empty,Loading,timeout,等通用的场景处理
            mBaseLoadService = LoadSir.getDefault().register(content, new Callback.OnReloadListener() {
                @Override
                public void onReload(View v) {
                    onHttpReload(v);
                }
            });
        }
        return rootView;
    }

使用的时候只要大概这样就好了:

        /**
         * mBaseLoadService,很方便的就能展示空啊什么的;
         *
         */
        if (data == null || data.size() == 0) {
            mBaseLoadService.showCallback(EmptyCallback.class);
        } else {
            mBaseLoadService.showSuccess();
        }

Demo on github:AndroidAppFrameWork(代码估计能加快理解)

你可能感兴趣的:(Android 中通用的Toolbar和Error,Empty,Loading UI 处理)