怎么在Android中实现一个无网络页面切换功能

  介绍

怎么在Android中实现一个无网络页面切换功能?相信很多没有经验的人对此束手无策,为此本文总结了问题出现的原因和解决方法,通过这篇文章希望你能解决这个问题。

<强>实现思路

需求是在无网络的时候显示特定的页面,想到要替换页面的地方,大多都是recyclerview或者第三方recyclerview这种需要显示数据的地方,因此决定替换掉页面中所有的recyclerview为无网络页面

<强>实现过程

1,在BaseActivity中,当加载布局成功以后,通过id找到要替换的观点,通过indexOfChild()方法,找到要替换的视图的位置,再通过删除和添加视图来实现,因为是在基地替换,而且使用的是findviewById,这样子就省去了考虑片段中的视图中,局限性是要替换的视图的命名必须要统一

2点击按钮重新请求数据,需要重新刷新数据,因此使用了无网络页面的行为需要重写基础的刷新数据方法,去重新请求数据。

<>强优缺点

因为只在基地中替换,因此要替换的视图id名需要一致,对比通过decorview拿到内容之后遍历所有控件获取到要替换的视图的方法效率更高,而且省去了考虑片段的情况,通过findviewById()方法可以直接获取到片段中需要替换的recyclerview。

<强>代码实现

在加载布局成功初始化无网络页面

, @Override   public 才能;void  onWindowFocusChanged (boolean  hasFocus), {   ,,,super.onWindowFocusChanged (hasFocus);   ,,,if  (hasFocus), {   ,,,,,initNoNetView (R.id.id_xrv R.id.rv);   ,,,}   以前,,}

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

/* *   ,,*,判断网络是否连接   ,,*   ,,*,@param 上下文   ,,* @return   ,,*/public 才能;static  boolean 与(Context 上下文),{      ,,,ConnectivityManager  connectivity =, (ConnectivityManager),上下文   ,,,,,,,.getSystemService (Context.CONNECTIVITY_SERVICE);      ,,,if  (null  !=,连接),{      ,,,,,NetworkInfo  info =, connectivity.getActiveNetworkInfo ();   ,,,,,if  (null  !=, info ,,, info.isConnected ()), {   ,,,,,,,if  (info.getState (),==, NetworkInfo.State.CONNECTED), {   ,,,,,,,,,return 真实;   ,,,,,,,}   ,,,,,}   ,,,}   ,,,return 假;   以前,,}

初始化无网络页面,定义一个不定长的视图的id组成的数组,参数为需要替换的视图的共同的id,可以为多个,会替换第一个找到的不为零的观点。

private  void  initNoNetView (int …id), {   ,,,if  (! OkHttpUtil.isConnected (BaseActivity.this),,,, ! haveShowNetView), {   ,,,,,final  List, viewList =, new  ArrayList<在();   ,,,,,//通过id获取视图   ,,,,,for  (int  id : id), {   ,,,,,,,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,,“没有获取到网络,请重试…“);   ,,,,,,,,,,,返回;   ,,,,,,,,,}   ,,,,,,,,,//切换到有网络页面   ,,,,,,,,,showHaveNetView (viewList noNetView);      ,,,,,,,}   ,,,,,});   ,,,,,//切换到无网络页面   ,,,,,showNoNetView (viewList noNetView);   ,,,,,      ,,,}   以前,,}

页面切换

private  void  showHaveNetView (List怎么在Android中实现一个无网络页面切换功能