本文介绍了Android 实现无网络页面切换的示例代码,分享给大家,具体如下:

实现思路
需求是在无网络的时候显示特定的页面,想到要替换页面的地方,大多都是recyclerview或者第三方recyclerview这种需要显示数据的地方,因此决定替换掉页面中所有的recyclerview为无网络页面
实现过程
1 在BaseActivity中,当加载布局成功以后,通过id找到要替换的view,通过indexOfChild()方法,找到要替换的view的位置,再通过remove和add view来实现,因为是在base替换,而且使用的是findviewById,这样子就省去了考虑fragment中的view,局限性是要替换的view的命名必须要统一
2 点击按钮重新请求数据,需要重新刷新数据,因此使用了无网络页面的act需要重写base的刷新数据方法,去重新请求数据。
优缺点
因为只在base中替换,因此要替换的view,id名需要一致,对比通过decorview拿到content之后遍历所有控件获取到要替换的view的方法效率更高,而且省去了考虑fragment的情况,通过findViewById()方法可以直接获取到fragment中需要替换的recyclerview。
代码实现
在加载布局成功初始化无网络页面
@Override
public void onWindowFocusChanged(boolean hasFocus) {
super.onWindowFocusChanged(hasFocus);
if (hasFocus) {
initNoNetView(R.id.id_xrv,R.id.rv);
}
}
需要一个工具类用来获取网络状态
/**
* 判断网络是否连接
*
* @param context
* @return
*/
public static boolean isConnected(Context context) {
ConnectivityManager connectivity = (ConnectivityManager) context
.getSystemService(Context.CONNECTIVITY_SERVICE);
if (null != connectivity) {
NetworkInfo info = connectivity.getActiveNetworkInfo();
if (null != info && info.isConnected()) {
if (info.getState() == NetworkInfo.State.CONNECTED) {
return true;
}
}
}
return false;
}
初始化无网络页面,定义一个不定长的view的id组成的数组,参数为需要替换的view的共同的id,可以为多个,会替换第一个找到的不为null的view。
private void initNoNetView(int ...ids) {
if (!OkHttpUtil.isConnected(BaseActivity.this) && !haveShowNetView) {
final List<View> viewList = new ArrayList<>();
//通过id获取view
for (int id : ids) {
viewList.add(findViewById(id));
}
//实现自己的无网络页面
final View noNetView = View.inflate(BaseActivity.this, R.layout.layout_no_net, null);
noNetView.findViewById(R.id.btn_try).setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
if (!OkHttpUtil.isConnected(BaseActivity.this)) {
T.showShort(BaseActivity.this, "没有获取到网络,请重试...");
return;
}
//切换到有网络页面
showHaveNetView(viewList,noNetView);
}
});
//切换到无网络页面
showNoNetView(viewList,noNetView);
}
}
页面切换
private void showHaveNetView(List<View> viewList, View noNetView) {
for (View view : viewList) {
if (view==null){
continue;
}
haveShowNetView = false;
transView(noNetView, view);
onReNetRefreshData();
break;
}
}
private void showNoNetView(List<View> viewList, View noNetView) {
for (View view : viewList) {
if (view==null){
continue;
}
haveShowNetView = true;
transView(view, noNetView);
break;
}
}
protected void transView(final View defaultView, View replaceView) {
final int index = ((ViewGroup) defaultView.getParent()).indexOfChild(defaultView);
ViewGroup.LayoutParams params = defaultView.getLayoutParams();
ViewGroup parent = (ViewGroup) defaultView.getParent();
parent.removeView(defaultView);
parent.addView(replaceView, index, params);
}
点击按钮显示有网络页面的时候通知页面更新数据,BaseAct为空实现,需要更新数据的页面重写onReNetRefreshData()方法。
public void onReNetRefreshData() {
}
整体代码
private boolean haveShowNetView = false;
@Override
public void onWindowFocusChanged(boolean hasFocus) {
super.onWindowFocusChanged(hasFocus);
if (hasFocus) {
initNoNetView(R.id.id_xrv,R.id.rv);
}
}
private void initNoNetView(int ...ids) {
if (!OkHttpUtil.isConnected(BaseActivity.this) && !haveShowNetView) {
final List<View> viewList = new ArrayList<>();
//通过id获取view
for (int id : ids) {
viewList.add(findViewById(id));
}
//实现自己的无网络页面
final View noNetView = View.inflate(BaseActivity.this, R.layout.layout_no_net, null);
noNetView.findViewById(R.id.btn_try).setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
if (!OkHttpUtil.isConnected(BaseActivity.this)) {
T.showShort(BaseActivity.this, "没有获取到网络,请重试...");
return;
}
//切换到有网络页面
showHaveNetView(viewList,noNetView);
}
});
//切换到无网络页面
showNoNetView(viewList,noNetView);
}
}
private void showHaveNetView(List<View> viewList, View noNetView) {
for (View view : viewList) {
if (view==null){
continue;
}
haveShowNetView = false;
transView(noNetView, view);
onReNetRefreshData();
break;
}
}
private void showNoNetView(List<View> viewList, View noNetView) {
for (View view : viewList) {
if (view==null){
continue;
}
haveShowNetView = true;
transView(view, noNetView);
break;
}
}
public void onReNetRefreshData() {
}
protected void transView(final View defaultView, View replaceView) {
final int index = ((ViewGroup) defaultView.getParent()).indexOfChild(defaultView);
ViewGroup.LayoutParams params = defaultView.getLayoutParams();
ViewGroup parent = (ViewGroup) defaultView.getParent();
parent.removeView(defaultView);
parent.addView(replaceView, index, params);
}
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持。
# Android
# 无网络页面切换
# 实现页面切换
# Android实现移动小球和CircularReveal页面切换动画实例代码
# Android中TabLayout结合ViewPager实现页面切换
# Android 中使用 ViewPager实现屏幕页面切换和页面轮播效果
# Android开发中ViewPager实现多页面切换效果
# Android中TabLayout结合ViewPager实现页面切换效果
# Android中使用TabHost 与 Fragment 制作页面切换效果
# Android使用Fragment打造万能页面切换框架
# Android编程之页面切换测试实例
# Android fragment实现多个页面切换效果
# 切换到
# 自己的
# 是在
# 重写
# 的是
# 都是
# 定长
# 加载
# 第一个
# 多个
# 遍历
# 请重试
# 给大家
# 更高
# 可以直接
# 只在
# 不为
# 第三方
# 这样子
# 来实现
相关文章:
香港服务器网站卡顿?如何解决网络延迟与负载问题?
详解免费开源的.NET多类型文件解压缩组件SharpZipLib(.NET组件介绍之七)
电影网站制作价格表,那些提供免费电影的网站,他们是怎么盈利的?
电商网站制作多少钱一个,电子商务公司的网站制作费用计入什么科目?
官网自助建站平台指南:在线制作、快速建站与模板选择全解析
建站之星后台搭建步骤解析:模板选择与产品管理实操指南
免费公司网站制作软件,如何申请免费主页空间做自己的网站?
网站设计制作书签怎么做,怎样将网页添加到书签/主页书签/桌面?
如何选择靠谱的建站公司加盟品牌?
韩国网站服务器搭建指南:VPS选购、域名解析与DNS配置推荐
大连网站制作公司哪家好一点,大连买房网站哪个好?
网站制作软件免费下载安装,有哪些免费下载的软件网站?
建站168自助建站系统:快速模板定制与SEO优化指南
网站制作哪家好,cc、.co、.cm哪个域名更适合做网站?
Swift中循环语句中的转移语句 break 和 continue
如何用y主机助手快速搭建网站?
网站制作的步骤包括,正确网址格式怎么写?
成都品牌网站制作公司,成都营业执照年报网上怎么办理?
北京网站制作费用多少,建立一个公司网站的费用.有哪些部分,分别要多少钱?
韩国服务器如何优化跨境访问实现高效连接?
如何选择长沙网站建站模板?H5响应式与品牌定制哪个更优?
南宁网站建设制作定制,南宁网站建设可以定制吗?
沈阳制作网站公司排名,沈阳装饰协会官方网站?
深圳网站制作公司好吗,在深圳找工作哪个网站最好啊?
枣阳网站制作,阳新火车站打的到仙岛湖多少钱?
网站制作壁纸教程视频,电脑壁纸网站?
如何在腾讯云服务器上快速搭建个人网站?
存储型VPS适合搭建中小型网站吗?
logo在线制作免费网站在线制作好吗,DW网页制作时,如何在网页标题前加上logo?
黑客入侵网站服务器的常见手法有哪些?
如何在阿里云通过域名搭建网站?
网站制作公司排行榜,抖音怎样做个人官方网站
如何确认建站备案号应放置的具体位置?
如何在宝塔面板中修改默认建站目录?
c# F# 的 MailboxProcessor 和 C# 的 Actor 模型
建站主机如何选?高性价比方案全解析
建站之星上传入口如何快速找到?
名字制作网站免费,所有小说网站的名字?
建站主机空间推荐 高性价比配置与快速部署方案解析
如何登录建站主机?访问步骤全解析
股票网站制作软件,网上股票怎么开户?
专业网站制作企业网站,如何制作一个企业网站,建设网站的基本步骤有哪些?
如何选择高效可靠的多用户建站源码资源?
高防服务器租用首荐平台,企业级优惠套餐快速部署
如何用好域名打造高点击率的自主建站?
开封网站制作公司,网络用语开封是什么意思?
如何在Golang中使用replace替换模块_指定本地或远程路径
C++时间戳转换成日期时间的步骤和示例代码
实惠建站价格推荐:2025年高性价比自助建站套餐解析
网站企业制作流程,用什么语言做企业网站比较好?
*请认真填写需求信息,我们会在24小时内与您取得联系。