美文网首页Android开发UIAndroid知识
关于错误页面,空页面,和网络加载等,或许这是我能想到的最好的处理

关于错误页面,空页面,和网络加载等,或许这是我能想到的最好的处理

作者: Lymeki | 来源:发表于2017-09-21 10:44 被阅读0次

    在Android开发的过程中,错误页面,空白页面,网络加载页面,甚至各种各样的状态的页面是少不了的,比如说,当我们在加载一处网络数据时,网络请求的过程中我们要显示加载中的页面,如果请求下来的数据为空,我们要提示给用户当前数据为空的界面,如果要是加载失败,还要再展示加载失败页面,总之就是根据不同的情况,然后对应不同的页面。
    一般遇到这种情况的时候,大体上的思路就是每个页面都分别include各个这样的异常页面,然后根据出现的异常情况来动态 设置visible/gone,这样虽然说是效果是那个效果,但是这样在xml也要处理,java文件也要处理,想想感觉就很麻烦,而且感觉代码也不是很优雅,那么有木有个简单一点的处理办法呢?
    其实我们可以尝试着一个新的思路,就是不管什么错误页面,空白页面呀什么的对应本该显示内容页面,不再是可见与不可以的关系,而是哪个页面添加到其父容器的关系,添加进去了的就显示,没有添加的可能就显示不出来,并且保证他们在父容器里面的layoutParams是一样的就行咯,而且完全不需要修改以前的layout文件。

    首先,在找到想要替换的View/ViewGroup:

    View targetView = findVIewById(R.id.target_view);
    

    然后,找到其在父容器中的位置与layoutParams:

    ViewParent viewParent = targetView .getParent();
    int index = viewParent .indexOfChild(targetView);
    
    ViewGroup.LayoutParams layoutParams = targetView.getLayoutParams()
    

    最后,就是将想要展示出来的Layout(比如说加载页面,错误页面,以下就以R,layout.loading为例)替换掉之前的targetView在其父容器中的位置就行了:

     LayoutInflater factory = LayoutInflater.from(targetView .getContext());
     View view = factory.inflate(layoutResId, viewParent , false);
    
    //view 替换掉targetView
    viewParent .removeViewInLayout(targetView );
    viewParent .addView(view, index, layoutParams);
    
    

    但是,总是直接这样使用感觉还是不太好,于是我根据上面的思路,进行了下简单的封装。源码以及使用方法都放在github上了。
    github地址:https://github.com/Lymeki/StubSwitcher
    上个效果图:

    demo1.gif

    欢迎讨论;

    相关文章

      网友评论

        本文标题:关于错误页面,空页面,和网络加载等,或许这是我能想到的最好的处理

        本文链接:https://www.haomeiwen.com/subject/gpxlsxtx.html