Android 实现无网络页面切换的示例代码

Android 实现无网络页面切换的示例代码,第1张

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

本文介绍了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);    }  }
@H_404_46@

需要一个工具类用来获取网络状态

/**   * 判断网络是否连接   *   * @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;  }
@H_404_46@

初始化无网络页面,定义一个不定长的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);          }  }
@H_404_46@

页面切换

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);  }
@H_404_46@

点击按钮显示有网络页面的时候通知页面更新数据,BaseAct为空实现,需要更新数据的页面重写onReNetRefreshData()方法。

public voID onReNetRefreshData() { }
@H_404_46@

整体代码

 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,noNetVIEw);          }  }  private voID showHaveNetVIEw(List<VIEw> vIEwList,noNetVIEw);      break;    }  }  public voID onReNetRefreshData() {  }  protected voID transVIEw(final VIEw defaultview,params);  }
@H_404_46@

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持编程小技巧。

总结

以上是内存溢出为你收集整理的Android 实现无网络页面切换的示例代码全部内容,希望文章能够帮你解决Android 实现无网络页面切换的示例代码所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/web/1144542.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-05-31
下一篇 2022-05-31

发表评论

登录后才能评论

评论列表(0条)

保存