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

在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

欢迎讨论;

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

  • Android 自定义View的各种姿势1 Activity的显示之ViewRootImpl详解 Activity...
    passiontim阅读 176,025评论 25 709
  • 今天下了火车就直接往家里赶了。地铁里接到阿里人事的电话,说下午会安排一个电话面试。我接到电话后确定时间便不在多问了...
    GrandFarmer阅读 1,301评论 0 0
  • 5月的一个周末,幼儿园亲子运动会,参加袋鼠跳跳跳项目的时候,大果看到排在旁边队伍的一个女孩子,大喊:王灵雨!过去亲...
    董大果阅读 1,463评论 0 0
  • 妈妈: 您还好吗?昨天我拿到了一个省教育厅的证书,我多想扑进您的怀里,和您尽情分享这快乐,可是,没有人,一个人面对...
    素心如镜阅读 3,392评论 1 2
  • 《儿子与情人》是英国作家戴维.赫伯特.劳伦斯创作的一部长篇小说,也是作者根据自身经历写的一部自传体作品。在这部作品...
    独立行走的鱼阅读 8,899评论 2 14

友情链接更多精彩内容